项目背景:
采用Spring Cloud+IDEA+Maven搭建了由多个微服务组成的项目,部署上线是用的是Docker容器技术。
问题描述:
各个项目在本地启动测试时,各个微服务都正常调用,而且都注册到了eureka注册中心,但是当项目部署到docker容器上之后(一个项目一个容器),相互调用时报java.net.UnknownHostException:主机名的错误。

项目配置文件如下所示:
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://root:root@192.168.11.181:7776/eureka
instance:
lease-expiration-duration-in-seconds: 2
lease-renewal-interval-in-seconds: 2
instance-id: ${spring.cloud.client.ipAddress}:${server.port}
spring:
application:
name: eureka-provider-demo
解决方案:
将每个需要注册的微服务的application.yml文件中添加一行:prefer-ip-address: true
改后如下所示:
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://root:root@192.168.11.181:7776/eureka
instance:
lease-expiration-duration-in-seconds: 2
lease-renewal-interval-in-seconds: 2
prefer-ip-address: true
instance-id: ${spring.cloud.client.ipAddress}:${server.port}
spring:
application:
name: eureka-provider-demo
此时调用就恢复正常了
本文解决了一项技术难题,在Docker容器环境下,SpringCloud微服务项目部署后出现的服务间调用失败问题。通过修改配置文件,加入prefer-ip-address参数,确保了服务在容器中正确注册和调用。
1731

被折叠的 条评论
为什么被折叠?



