问题:重启后如何在单个节点上的 dockerized Consul 集群中保留 IP

我对 Docker 和 Consul 很陌生,现在尝试建立一个由 3 个 dockerized 节点组成的本地 Consul 集群。我正在使用progrium/consulDocker 映像并浏览了整个教程和所描述的示例。

集群工作正常,直到重新启动/重新启动。

这是我的docker-compose.yml:

--- node1: command: "-server -bootstrap-expect 3 -ui-dir /ui -advertise 10.67.203.217" image: progrium/consul ports: - "10.67.203.217:8300:8300" - "10.67.203.217:8400:8400" - "10.67.203.217:8500:8500" - "10.67.203.217:8301:8301" - "10.67.203.217:8302:8302" - "10.67.203.217:8301:8301/udp" - "10.67.203.217:8302:8302/udp" - "172.17.42.1:53:53/udp" restart: always node2: command: "-server -join 10.67.203.217" image: progrium/consul restart: always node3: command: "-server -join 10.67.203.217" image: progrium/consul restart: always registrator: command: "consul://10.67.203.217:8500" image: "progrium/registrator:latest" restart: always

我收到如下消息:

[ERR] raft: Failed to make RequestVote RPC to 172.17.0.103:8300: dial tcp 172.17.0.103:8300: no route to host

这显然是因为我的节点 2 和 3 在重启后获得了新 IP。那么有可能防止这种情况吗?阅读有关链接和环境变量的信息,但似乎这些变量在重新启动后也没有更新。

解答

在我读到重新启动容器化领事节点时存在 ARP 表缓存问题之前,我遇到了同样的问题。

据我所知,有两种解决方法:

  1. 使用 --netu003dhost 运行你的容器

  2. 重启容器前清除 ARP 表: docker run --netu003dhost --privileged --rm cap10morgan/conntrack -F

所有者(Jeff Lindsay)告诉我,他们正在重新设计整个容器并内置此修复程序,不幸的是没有时间表。

来源:https://github.com/progrium/docker-consul/issues/26

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐