Docker容器静态IP以便两个不同主机之间通信

4

是否可以更改docker0的IP或为docker容器提供静态IP,因为默认情况下Docker容器具有172.17.0.2/16的IP范围,但我的网络是192.168.X.X/24,此时在运行容器的服务器上,所有容器都能够相互通信,但从其他服务器连接失败。


可能是给Docker容器分配静态公共IP地址的可能性?的重复问题。 - roottraveller
在我的场景中,我在两个主机上运行Docker并创建了一个集群,但由于IP问题,我的第二个主机容器无法与集群节点通信,因此无法构建集群。 - anand
4个回答

2
如何设置集群?你使用Swarm吗?如果是这样,你需要使用k/v存储后端来实现不同主机上托管的两个容器之间的通信。你想要做的就是这个吗?还是你希望主机与其他主机上的容器通信? 不管怎样,解决方案都是相似的。
我正在重写一个Docker Swarm教程,以便将其推送到它们的Swarm文档中进行pull请求,你可以参考一下:https://www.auzias.net/en/docker-network-multihost/ 祝愉快!

我还没有使用Swarm,实际上我在一台主机上运行了两个节点,它们能够相互通信,另外两个节点正在另一台主机上运行,但问题是第一台主机的节点无法与第二台主机的节点通信,导致集群失败。 - anand
你说的“集群失败”是什么意思?多主机网络并不那么简单。 - Auzias
你可以在以下链接找到一些文档:
  • https://github.com/docker/docker/issues/8951
  • http://blog.docker.com/2015/11/docker-multi-host-networking-ga/
  • https://docs.docker.com/engine/userguide/networking/get-started-overlay/
- Auzias

1
问题可以通过使用--network=host来解决。
这将允许您的容器使用主机的网络。为了直接访问容器,您可以更改容器的ssh端口,并使用特定的端口号访问容器。

0

你能更具体一些吗?我的意思是如何将容器的IP分配到与主机机器相同的网络中,因为我已经说过容器和主机的IP是不同的。 - anand
1
使用 --ip 可以将 IP 地址设置为任何你想要的。在此之前,你需要创建自己的子网(只需检查链接)。现在,如果你希望主机和容器在同一网络中,则需要使用 --net=host - cantSleepNow

0

在这里,我们无法更改docker0 IP地址,但我们可以选择创建多个网络。
解决方案1:
可以通过使用带有主机网络的启动容器来实现 --network=host
解决方案2:
我们还可以通过公开所需端口并从另一个节点进行通信来启动容器。
-p hostport:serviceport
或者,解决方案3:
我们可以在docker swarm上部署集群。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接