如何将docker容器的IP地址动态映射到另一个容器



我有几个docker容器在主机上运行。我有一个场景,我需要将一个容器的IP地址映射到另一个容器中可用的配置文件。我知道我可以使用docker inspect [container]命令获得容器的IP地址。我假设每次重新启动容器时都动态地分配IP地址。所以每次我需要改变这个IP地址在另一个容器。是否可以为容器提供静态ip,或者我可以使用主机的ip地址而不是容器的ip地址。我是码头世界的新手。

我也有一个情况,我需要将IP地址映射到另一个主机上运行的容器。例如,我有一个redis容器运行在HostA和tomcat容器运行在HostB。为了从tomcat与redis通信,我需要在tomcat容器中映射redis的ip地址和端口。如何在docker中实现?

更新:带有--link参数的链接容器被标记为legacy

警告:——link标志是Docker的遗留特性。它可能最终被移除。除非你绝对需要继续使用它,我们建议您使用用户定义的网络来方便两个容器之间的通信,而不是使用——link。一个用户定义网络不支持的特性可以使用——link在容器之间共享环境变量。但是,您可以使用卷等其他机制来共享环境

你需要docker网络。下面的例子来自官方文档,但这里只有几行:

首先创建docker网络,例如:

docker网络创建--driver桥在用户定义的网络中链接容器:

docker run --network=your_netowrk -itd --name=container4 --link container5:c5 image
docker run --network=your_netowrk -itd --name=container5 --link container4:c4 image

原始答:

您可以像文档中那样运行链接的容器。

docker run -itd --name=container4 --link container5:c5 image
docker run -itd --name=container5 --link container4:c4 image

和ping第二个容器别名 (c5):

docker attach container4
/ # ping -w 4 c5
PING c5 (172.25.0.5): 56 data bytes
64 bytes from 172.25.0.5: seq=0 ttl=64 time=0.070 ms

,所以你可以看到可以用别名ping第二个容器,而不是用IP地址

对于你的第二个问题:这是可能的,如果你有redistomcat,他们知道彼此的IP地址(他们是可访问的,因为他们在一些网络中),所以这几乎都是关于网络的配置。

正如Vlado指出的那样,您应该通过主机名访问容器,并允许Docker管理将这些名称映射到IP地址。对于这种遗留链接和用户定义网络中的链接有两种选择。这两种描述都值得一读,但他的段落概述了两种方法之间的区别(强调我的)

请注意,在创建container4时,我们链接到一个名为container5的容器,该容器尚未创建。这是默认桥接网络中的遗留链路与用户定义网络中的新链路功能之间的行为差异之一。遗留链接本质上是静态的,它用别名硬绑定容器,并且不允许链接的容器重新启动。虽然用户定义网络中的新链接功能本质上是动态的,并且支持链接容器重启,包括允许链接容器上的ip地址更改。

根据你的下一个问题,如果你想在多个主机上运行容器,你可能想要设置一个覆盖网络。这些绝对不支持遗留链接。

官方文档有很好的例子,包括运行什么命令,创建链接和用户自定义网络。

最新更新