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

Tomcat 如何将docker容器的IP地址动态映射到另一个容器,tomcat,docker,docker-compose,dockerfile,docker-machine,Tomcat,Docker,Docker Compose,Dockerfile,Docker Machine,我有几个docker容器在主机中运行。我有一个场景,需要将一个容器的IP地址映射到另一个容器中可用的配置文件。我知道我可以使用docker inspect[container]命令获取容器的IP地址。我假设每次重新启动容器时都会动态分配IP地址。所以每次我需要在另一个容器中更改这个IP地址时。是否可以为容器使用静态ip,或者我可以使用主机的ip地址而不是容器的ip地址。我是docker world的新手 还有一个例子,我需要将IP地址映射到另一台主机上运行的容器。例如,我有一个redis容器在H

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


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

更新:将容器与
--link
参数链接标记为遗留

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

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

首先创建docker网络,例如:

docker网络创建
--驱动程序
连接您 现在,您可以运行文档中的容器-链接用户定义网络中的容器

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

原始答案:

您可以运行链接的容器,如文档中所示-:

并通过别名ping第二个容器(c5):

因此,您可以看到可以使用别名ping第二个容器,而不是IP地址


关于你的第二个问题:如果你有
redis
tomcat
并且它们知道彼此的IP地址(并且它们可以访问,因为它们在某些网络中),那么这几乎就是网络的配置。

正如弗拉多指出的那样,您应该通过主机名访问容器,并允许Docker管理这些名称到IP地址的映射。中有两个选项和链接。这两种描述都值得一读,但他的段落概括了这两种方法之间的区别(我的重点)

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

根据您的情况,如果您想在多台主机上运行容器,您可能需要设置一个。这些肯定不支持传统链接


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

天哪,我不确定您是否需要自定义网络来将两个容器链接在一起。GoogleDocker容器链接。它是内置的。@user2105103谢谢,你说得对,我不知道它是内置的,对于2个容器来说,创建自定义网络是“无用的”。链接被标记为遗留->用户定义网络的还原答案你几乎肯定不需要实际的IP地址,这是一种可怕的链接方式。使用容器链接——它是烘焙的。我在tomcat容器中有一个属性文件,我必须在其中提供redis的ip地址。tomcat在启动期间读取此属性并与redis连接。那么链接将如何解决这个问题呢?使用别名链接容器是否意味着容器的主机名?@Jugi是的,它是主机名(或我在回答中说的别名),您可以检查
/etc/hosts
——它类似于
localhost
作为
127.0.0.1
的别名。在您的情况下,tomcat
/etc/hosts
将具有redis的ip地址。类似于:
172.17.0.5 redis
@VladoDemcak。谢谢。。
docker run -itd --name=container4 --link container5:c5 image
docker run -itd --name=container5 --link container4:c4 image
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