由于开发需要,需要在本地运行一个Consul环境,由于电脑上已经有Docker环境了,于是就直接在Docker里面搭一套Consul集群。 但是在使用过城中遇到一点小坑。
集群要求要有
3
个Server
,将容器8500
端口映射到主机8900
端口,同时开启管理界面
1. 启动第1个Server节点
docker run -d --name=consul1 -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul:1.6.2 agent --server=true --bootstrap-expect=3 --client=0.0.0.0 -ui
2. 获取consul1的ip地址
JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' do1_consul1)";
3. 启动第2个Server节点,并加入集群
docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul:1.6.2 agent --server=true --client=0.0.0.0 --join $JOIN_IP
4. 启动第3个Server节点,并加入集群
docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul:1.6.2 agent --server=true --client=0.0.0.0 --join $JOIN_IP
5. 启动第4个Client节点,并加入集群
docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul:1.6.2 agent --server=false --client=0.0.0.0 --join $JOIN_IP
浏览器访问 http://localhost:8500验证是否部署成功。
1. 将kv.json复制到容器内
docker cp ~/Desktop/consul_kv.json consul1:/tmp
2. 导入kv.json
docker exec consul1 consul kv import @/tmp/consul_kv.json
consul
集群跑起来之后,于是在IDEA
跑SpringCloud
项目注册到部署好的Consul
服务,当服务注册好之后,检查其健康状态,发现服务一直提示All node checks passing
报了个小红叉❌。
通过各种尝试都发解决之后,发现是因为在容器内部调用容器外(宿主机)的相应服务的时候网络不通,导致健康检查一直处于失败的状态,于是,修改SpringCloud
工程的配置文件,新增配置:
spring.cloud.consul.discovery.preferIpAddress=true
spring.cloud.consul.discovery.ipAddress=docker.for.mac.host.internal
重新启动服务,各项检查都正常了。
macOS
,未在别的环境重现和解决这个问题。docker.for.mac.host.internal
访问宿主机网络和端口。文章链接
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有