微服务Docker容器化部署后的服务注册IP地址
由于微服务docker容器化部署后,在Nacos服务注册中心自动注册的是docker容器的IP地址。在没有其它的网络虚拟化支持的情况下,docker容器IP地址外部不可通讯,造成该服务不可用。
解决方法:
- 在bootstrap.properties中增加配置项,并用环境变量设定服务注册IP地址 spring.cloud.nacos.discovery.ip=${DISCOVERY_IP} ,如下:
spring.application.name=resource spring.profiles.active=test spring.cloud.nacos.config.enabled=true spring.cloud.nacos.discovery.enabled=true spring.cloud.nacos.config.server-addr=10.**.**.40:11002 spring.cloud.nacos.config.namespace=23b61e7e-*****-*****-1db5d0b22f17 spring.cloud.nacos.config.group=RESOURCE_MANAGE_GROUP spring.cloud.inetutils.preferred-networks=10.**.**.26 spring.cloud.nacos.discovery.ip=${DISCOVERY_IP} spring.cloud.nacos.discovery.port=8080 spring.cloud.nacos.config.extension-configs[0].data-id=com-{spring.profiles.active}.properties spring.cloud.nacos.config.extension-configs[0].group=COMM spring.cloud.nacos.config.extension-configs[0].refresh=true
- 在容器运行命令中设定环境变量为宿主机IP,并指定宿主机和容器的端口映射,即可实现用宿主机IP注册服务。 以避免在不同的宿主机上运行需要构建不同的镜像,如下:
docker run -d -e DISCOVERY_IP=10.100.52.*** -p 8080:8080 -v /root/logs:/root/resoruce-1.0-SNAPSHOT/logs cf2d48741a5e
- 其它随着容器化部署环境变化配置内容有变化的配置项也可以采取以上方式解决,如:SIT环境和生产环境nacos命名空间的不同配置,达到同一镜像可以部署在不同的环境。