SpringCloud微服务部署Docker,微服务不能相互调用

最近在学习将spring cloud服务部署到docker,遇到了将微服务部署到docker,然后就不能调用,本地是可以正常调用的。这里我说一下我的环境,一个生产者服务(service-hi-user),一个配置中心服务(configsever),一个Eureka注册中心服务。本机宿主机IP:192.168.31.193,Eureka注册中心容器IP:172.17.0.2,配置中心服务容器IP:172.17.0.3,生产者服务:172.17.0.4

 配置中心配置连接注册中心:

eureka:
  client:
    #表示是否将自己注册到Eureka Server,默认=true
    fetch-registry: true
    #表示是否从Eureka Server获取注册的服务信息,默认=true
    register-with-eureka: true
    #注册中心地址
    serviceUrl:
      defaultZone: http://192.168.31.193:35000/eureka/



#这里192.168.31.193的可以改成注册中心容器的IP,我测试过三个容器之前是可以相互连接的。

 生产者服务配置:

spring:
  cloud:
    config:
      enabled: true     #启配置中心
#      uri: http://192.168.31.193:35100
      discovery:
        enabled: true
        service-id: CONFIG-SERVER

eureka:
  client:
    #表示是否将自己注册到Eureka Server,默认=true
    fetch-registry: true
    #表示是否从Eureka Server获取注册的服务信息,默认=true
    register-with-eureka: true
    #注册中心地址
    serviceUrl:
      defaultZone: http://192.168.31.193:35000/eureka/

在容器中启动配置中心,发现配置中心的服务实例ID居然是容器ID,点击实例ID也是不能正常访问springboot actuator组件的info信息。

 然后启动生产者服务service-hi-user,发现连接的配置中心也是不通的

 到这里问题出来了,我在网上查了一下发现,是服务注册到注册中心服务的问题。

修改了配置中心注册服务的配置,指定服务注册到注册中心的IP地址。

eureka:
  client:
    #表示是否将自己注册到Eureka Server,默认=true
    fetch-registry: true
    #表示是否从Eureka Server获取注册的服务信息,默认=true
    register-with-eureka: true
    #注册中心地址
    serviceUrl:
      defaultZone: http://192.168.31.193:35000/eureka/
  instance:
    instance-id: ${spring.application.name}-test1       #服务实例Id
    hostname: 192.168.31.193              #或者使用容器IP172.17.0.3或者使用容器网络的别名
#    或者使用方法二
#    prefer-ip-address: true            #本质就是为了获取本机的真实IP
#    ip-address: 192.168.31.193

重启配置中心服务服务,服务实例Id和配置中心服务都能正常访问:

 重启生产者服务,全部正常解决。 

参考:

解决docker中启动Spring Boot微服务注册在Eureka后无法访问的问题

Spring Cloud Eureka 之常用配置解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值