docker容器部署springcloud微服务+config-server+hosts的坑

docker容器启动微服务可以使用-v /etc/hosts:/etc/hosts 这种方式使得容器内的hosts和宿主机的hosts同步从而获得hosts。如果不适用config-server,完全不存在问题。

spring:
  application:
    name: user-manage
  cloud:
       config:
         profile: dev
         #label: master
         #uri: 
         #fail-fast: true    #无法链接到config-server时快速返回失败。
         password: 123456    #访问config-server端点获取配置信息所需的用户名密码。SpringSecurity
         username: safebox
         discovery:
           service-id: config-server
           enabled: true   #通过服务名称访问config-server,不直接通uri,方便以后实现高可用
server:
  port: 8019
eureka:
  client:
    service-url:
      defaultZone: http://eureka.safebox.com:8761/eureka/
  instance:
        prefer-ip-address: true
        instance-id: ${spring.cloud.client.ip-address}:${server.port}

但是

使用config-server并且指定根据serviceId来找到config-server那就会报错,获取不到配置信息,查看控制台,一直是fetch localhost:8888。说配置没起作用。问题在哪呢?

之前运行其他微服务的时候,就发现,服务启动时候并不会第一时间识别到hosts,每次启动后,过一会才能找到hosts,估计是容器启动会先读配置文件,启动服务,然后再去从宿主机加载 hosts,所以导致第一时间无法注册到eureka,从而无法获取config-server的路径,无法获取配置信息,导致服务启动失败。

补充:期间考虑过只指定一个eureka的host,结合/etc/hosts,但是失败。还是会直接去找本地8888端口。

解决:可以不使用/etc/hosts和宿主机的映射。而在启动容器的时候手动指定所有hosts,–add-host h o s t . n a m e : {host.name}: host.name:{host.ip} 。这种方式会很麻烦,启动命令会很长,所以考虑使用shell脚本或者docker compose。

未完待续。。。。。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值