重新启动后,如何将IP保留在单个节点上的dockerized Consul群集中

我对Docker和Consul相当陌生,现在试图build立一个由3个dockerized节点组成的本地Consul Cluster。 我正在使用progrium/consul Docker镜像,并完成了整个教程和示例。
群集正常工作,直到重新启动/重新启动。

这是我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

这显然是因为新的IP我的节点2和3重新启动后得到。 那么是否有可能防止这种情况? 阅读关于链接和环境variables,但似乎这些variables也没有更新后重新启动。

我有同样的问题,直到我读到,当您重新启动一个集装箱化的领事节点有一个ARP表caching问题。

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

  1. 使用–net = host运行你的容器
  2. 在重新启动容器之前清除ARP表:docker run –net = host –privileged –rm cap10morgan / conntrack -F

业主(杰夫林赛)告诉我,他们正在重新分配整个容器内置此修复程序,不幸的是没有时间表。

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