在多机器上docker部署Spring Cloud发现有一个问题,即在docker容器内部,Spring Cloud eureka实例只能获取到docker内部网络的IP,如172.x.x.x,并将其注册到注册中心,此时其他服务通过该IP在docker外部无法访问该服务。以下有两种解决方法:
方法一:手动配置宿主机IP
启动容器时将宿主机的IP加到容器环境变量中然后在Spring Boot application.yml
中使用该环境变量。
application.yml
eureka:
instance:
# Necessary for Docker as it doesn't have DNS entries
prefer-ip-address: true
# Necessary for Docker otherwise you will get 172.0.0.x IP
ip-address: "${HOST}"
client:
serviceUrl:
# Location of your eureka server
defaultZone: <http://192.168.0.107:8761/eureka/>
启动docker时加入HOST
环境变量:
docker run -p <port>:<port> -e HOST='192.168.0.106' <image name>
或使用docker-compose:
my_service:
image: image_name
environment:
- HOST=192.168.0.106