【问题标题】:Unable to change the container's static IP in the docker swarm overlay network无法在 docker swarm 覆盖网络中更改容器的静态 IP
【发布时间】:2018-08-26 02:56:36
【问题描述】:

最近,

我有一个容器加入了 swarm 覆盖网络,

有时,出于多种原因,我会更改静态 IP,

但不确定为什么来自docker network inspect 的 IPv4Address 会

仍然显示旧 IP 地址,但不显示新 IP,

例如:

步骤 1. 运行容器 docker run -itd -h kafka_1 --name kafka_1 kafka:latest

步骤 2. 分配网络接口以加入覆盖网络 docker network connect --ip 172.20.0.110 test-overlay-net kafka_1

步骤 3. 附加到 kafka 容器并更改 ip ifconfig eth1 172.20.0.111 netmask 255.255.0.0 broadcast 172.20.255.255

步骤 4. 注销容器,并通过以下方式检查检查信息 docker network inspect test-overlay-net

步骤 5. 并意识到 IP 地址仍然是旧的,即使 ip 已经在容器中成功更改。 "Containers": { "df1de7d9809f3e84857ef19db10f7c50d3d65153dcd47f3b22af6ed3a5ab1b41": { "Name": "kafka_1", "EndpointID": "37fe6b03b87435f897780826992a6e1f9b491444738c10de6c7c56aea3edb71d", "MacAddress": "02:42:ac:14:00:6f", "IPv4Address": "172.20.0.110/16", "IPv6Address": "" },

有人知道如何解决这个问题吗?

目前,我只是通过使用docker network disconnect -f test-overlay-net kafka_1 找到解决方法,然后通过docker network connect --ip 重新连接

非常感谢!

【问题讨论】:

    标签: docker networking docker-swarm


    【解决方案1】:

    似乎 docker 从它的内部管理中读取 ip,而不是直接从容器的网络命名空间中读取,因此 docker 不知道您的 IP 更改。 当您没有明确指定 IP 时,docker 可能会将您在容器中设置的地址分配给新附加的地址,从而导致地址冲突。覆盖数据包路由也可能出现问题。 总之,我不建议更改容器内的 ip 设置。 你的用例是什么?

    【讨论】:

    • 抱歉回复晚了。我的用例是关于 HA 实现的,这里是一个服务(容器),它将在每个节点(VM*3)上的覆盖网络上创建,但通过主动-被动模式执行(VM-1 运行,VM-2 待机, VM-3 Standby),一旦 VM-1 消失,VM-2 将启动服务,然后利用 VM-1 的容器之前使用的容器 IP。
    • 但是,最后,就像你上面提到的,它似乎不允许用户做那件事,所以,我只是强行将覆盖网络中的死节点降级为其他 swarm manager 节点时一些节点(VM)消失了。
    最近更新 更多