惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
A
About on SuperTechFans
量子位
Engineering at Meta
Engineering at Meta
B
Blog
The Cloudflare Blog
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
J
Java Code Geeks
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

CAYZLH

Reasonix 开箱:聊聊我装的那些 Skill 收藏一份自驾中国的愿望清单 白夜行·谢幕 英雄联盟的昨日今天与符文大乱斗 折腾的尽头是极简 一个 `data.` 引发的血案——Redis 连接 localhost 问题排查全记录 MacBook上备忘录APP的快捷键和手势 让Google屏蔽某些搜索结果 WSL自定义安装Ubuntu typora自动上传图片配置 自建giscus服务 Windows下结束指定端口的进程 批量修改maven多模块版本号 使用winsw部署SpringBoot项目 Gson简易指南 使用Docker部署SpringBoot项目 Docker使用redis镜像 Docker使用rabbitmq Docker使用zookeeper Docker使用MySQL Dockerfile常用指令 Docker免sudo操作 雷鸟电视去广告 使用ADB卸载MIUI系统应用 利用GitHub做图床 将网站变成灰色 Github上传大文件 Android远程调试命令adb vscode快捷键的使用 SpringBoot文件上传异常处理
docker搭建Consul集群
Ant丶 · 2023-01-27 · via CAYZLH

由于开发需要,需要在本地运行一个Consul环境,由于电脑上已经有Docker环境了,于是就直接在Docker里面搭一套Consul集群。
但是在使用过城中遇到一点小坑。

Docker搭建Consul集群

集群要求要有3Server,将容器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验证是否部署成功。

导入kv

1. 将kv.json复制到容器内

docker cp ~/Desktop/consul_kv.json consul1:/tmp

2. 导入kv.json

docker exec consul1 consul kv import @/tmp/consul_kv.json

IDEA跑服务注册到Consul

遇到的坑

consul集群跑起来之后,于是在IDEASpringCloud项目注册到部署好的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访问宿主机网络和端口。