docker容器如何parsing运行在同一台机器上的其他docker容器的主机名?

我已经开始使用docker并且喜欢它,主要是因为Docker容器是一种轻量级的VM。 但我无法弄清楚,如何docker集装箱可以解决彼此的主机名。 他们可以使用那里的IP连接到对方,但不使用他们的主机名,我甚至不能编辑容器中的/ etc / hosts来弥补。 当我重新启动容器时,他们得到不同的IP,因此我想用主机名代替IP进行通信。 让我们说,我想在容器中运行一个Zookeeper集群的Zookeeper实例,并且我想把Zookeeper服务器的主机名放在config(zoo.cfg)文件中。

这可能是值得检查的Docker链接( https://docs.docker.com/userguide/dockerlinks/ )。 链接到正在运行的容器时,将为您希望连接的容器添加主机条目。

在他们的例子中显示

$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash root@aed84ee21bde:/opt/webapp# cat /etc/hosts 172.17.0.7 aed84ee21bde . . . 172.17.0.5 db 

正如你在这里所看到的,他们把他们在bash中的应用程序链接到名为db的容器上,随后为这个容器的IP地址添加一个主机条目。

所以在有zookeeper运行的情况下,你可以简单地让你刚开始的容器连接到zookeeper。 我希望这有帮助!

Docker 1.10开始 ,如果您创build了一个独特的Dockernetworking,Docker将使用内部DNS服务器[1] [2] [3]来parsing内部容器的主机名。 您可以在docker run指定一个带有--name的networking主机名。 否则,主机名将引用容器标识(12个字符长的散列,由docker container ls )。

也可以看看:

  • Docker不parsing主机名

  • 什么时候在Docker中使用–hostname?

资料来源:

[1] = docker docs – 用户定义networking中的embedded式DNS服务器

[2] = Docker引擎发行说明 – 1.10.0(2016-02-04) – networking

[3] = Docker pull请求 – 供应libnetwork