Spring Boot部署后无法通过hostname访问处在容器中的Nacos

场景:jar包和nacos都部署在docker容器中。
配置文件:

spring:
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: service_nacos:8848
      config:
        # 配置中心地址
        server-addr: service_nacos:8848

上述通过hostname无法访问nacos,但是把它改成容器的虚拟IP就可以访问了,我通过docker container inspect service_nacos查询发现hostname是配置了的:

{
  "Config": {
    "Hostname": "service_nacos"
  },
  "NetworkSettings": {
    "Networks": {
      "web_common": {
        "IPAddress": "172.25.0.5"
      }
    }
  }
}

通过虚拟IP访问的问题是,容器每次启动IP是重新分配的,希望还是通过hostname访问。

有朋友知道什么原因吗?


补充:
docker-compose-base.yml

version: "3"
services:
  service_nacos:
    hostname: service_nacos
    container_name: service_nacos
    image: nacos/nacos-server:2.0.0-bugfix
    environment:
      - PREFER_HOST_MODE=hostname
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=service_mysql
      - MYSQL_SERVICE_DB_NAME=funadmin_config
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=a123456
    volumes:
      - ./nacos/log/:/home/nacos/logs
      - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
    restart: on-failure
    networks:
      - web_common

networks:
  web_common:
    external: true

docker-compose-services.yml

version: "3"
services:
  service_gateway:
    hostname: service_gateway
    container_name: service_gateway
    build: ./services/gateway
    image: funadmin-gateway:1.0
    ports:
      - "8080:8080"
    external_links:
      - service_redis
      - service_nacos
      - service_mysql
    networks:
      - web_common

networks:
  web_common:
    external: true

Dockerfile:

FROM java:8

COPY . /usr/src/funadmin/gateway
WORKDIR /usr/src/funadmin/gateway

ENTRYPOINT ["java","-Dspring.profiles.active=prod","-jar","funadmin-gateway.jar"]
EXPOSE 8080
阅读 7k
1 个回答

可以让注册中心运行在host网络模式下,其他微服务通过节点ip注册。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题