2014-10-09 131 views
3

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

+1

不知道是否允许搬运工回调分配IP地址,那么它可以更新DNS服务器。其他选项包括客户端发送Dyndns更新,通过DHCPd分配IP(有些可以更新DNS),或者您可以检出车队。正常的解决方案是使用主机暴露的端口,这对于具有静态侦听器的服务器确实起作用。 – eckes 2014-10-09 03:50:20

回答

3

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

在他们的榜样,他们表现出

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

正如你在这里看到的,它们把他们在bash是与名为db容器中的申请,并随后主机条目添加db与IP地址那个容器。

因此,在运行zookeeper的情况下,您可以简单地将刚启动的容器连接到zookeeper。我希望这有帮助!

+0

这与compsoe的[documentation](https://docs.docker.com/compose/networking/)所说的一样 - 但我看不到任何主机条目:'docker exec -it my_container tail -20/etc/hosts'不会返回我的撰写文件中定义的任何服务。 – Munchkin 2016-09-02 14:42:54

1

作为多克尔1.10的,如果创建一个独特的搬运工网络,多克尔将帧内容器明智使用内部的DNS服务器解析主机名[1] [2] [3]。 您可以通过在docker run内指定--name来更改网络主机名。否则,主机名将引用容器标识(12字符长散列,如docker container ls所示)。

参见:

来源:

[1] = docker docs - Embedded DNS server in user-defined networks

[2] = Docker Engine release notes - 1.10.0 (2016-02-04) - Networking

[3] = Docker pull requests - Vendoring libnetwork

相关问题