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

Nip*_*dar 9 docker dockerhub

我开始使用 docker 并喜欢它主要是因为 Docker 容器是一种轻量级虚拟机。但我无法弄清楚,docker 容器如何解析彼此的主机名。他们可以使用 IP 地址相互连接,但不能使用主机名,我什至无法编辑容器中的 /etc/hosts 来弥补这一点。当我重新启动容器时,它们会获得不同的 IP,因此我想使用主机名代替 IP 来相互通信。假设我想在容器中运行 Zookeeper 集群的 Zookeeper 实例,并且想将 Zookeeper 服务器的主机名放入配置 (zoo.cfg) 文件中。

Mur*_*mel 5

Docker 1.10开始,如果您创建一个不同的 docker 网络,Docker 将使用内部 DNS 服务器在容器内解析主机名 [1][2][3]。您可以通过--namedocker run. 否则,主机名将引用容器 ID(12 个字符长的哈希值,如 所示docker container ls)。

也可以看看:

资料来源:

[1] = docker docs - 用户定义网络中的嵌入式 DNS 服务器

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

[3] = Docker 拉取请求 - Vendoring libnetwork


Mar*_*hes 3

可能值得查看 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
Run Code Online (Sandbox Code Playgroud)

正如您在此处看到的,它们将 bash 中的应用程序链接到名为 的容器db,随后添加一个db包含该容器 IP 地址的主机条目。

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

  • 这与 compsoe 的[文档](https://docs.docker.com/compose/networking/)所说的相同 - 但我看不到任何主机条目: `docker exec -it my_container tail -20 /etc/ Hosts` 不会返回我的撰写文件中定义的任何服务。 (2认同)