docker容器化的服务在eureka重复注册的解决办法

本文仅对单注册中心起作用,多注册中心会出现只有一个服务注册成功的问题

目前:

非容器化部署:

微服务注册到eureka,实例id是默认是 “主机名称:服务名称:服务端口号”,

如果配置eureka.instance.prefer-ip-address=true则实例id为 “主机Ip:服务名称:服务端口号

容器化部署:

containerId:服务名:端口号

当使用dockerfile重新部署时,将会删除旧容器,生成新容器,containerId变化,同名的服务就多一个实例如d1deb75f7aed:test:8080,并且被删除的容器实例d2b59f32b427:test:8080不下线

期望:

1:单注册中心时,注册为{主机名称:服务名称:服务端口号}或{主机Ip:服务名称:服务端口号}

多注册中心时,注册为{主机Ip:服务名称:服务端口号}

解决方法:

指定容器网络模式为host(使用主机的网络)

docker run -d --name rms --net host cm/rms:latest

  • –net=bridge— 默认选项,用网桥的方式来连接docker容器。
  • –net=host— docker跳过配置容器的独立网络栈。
  • –net=container:NAME_or_ID— 告诉docker让这个新建的容器使用已有容器的网络配置。
  • –net=none— 告诉docker为新建的容器建立一个网络栈,但不对这个网络栈进行任何配置,所以只能访问本地网络,没有外网。

出现问题:docker ps的时候看不到端口号

2.让停掉的容器服务下线

方法一:通过api强制下线

方法二:自定义实例id,后启动的实例覆盖掉先启动的同名实例

spring.application.name=rms
server.port=8080
eureka.instance.instance-id=${spring.application.name}:${server.port}
eureka.instance.prefer-ip-address=true

实例的Id相同,就不会因为containerId变化导致的实例id不同,让实例一直增加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值