Docker 不解析主机名

Docker doesn't resolve hostname

我需要知道同一台机器上某些容器 运行 的主机名(或 IP 地址)。 正如我已经评论过 here (but with no answer yet), I use docker-compose. The documentation 所说,compose 将自动为同一 docker-compose.yml 文件中定义的所有容器创建一个主机名条目:

Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.

但我无法通过 docker exec -it my_container tail -20 /etc/hosts 看到任何主机条目。 我还尝试将 links 添加到我的容器中,但没有任何改变。

Docker 1.10 introduced some new networking features which include an internal DNS server 主机查找完成的地方。

在默认桥接网络 (docker0) 上,查找将像过去一样通过 /etc/hosts 继续运行。 /etc/resolv.conf 将指向您的主机解析器。

在用户定义的网络上,Docker 将使用内部 DNS 服务器。 /etc/resolv.conf 将拥有 Docker DNS 服务器的内部 IP 地址。此设置允许桥接、自定义和覆盖网络以类似的方式工作。因此,swarm 上的覆盖网络将像本地桥接网络一样从整个 swarm 填充主机数据。

维护了 "legacy" 设置,因此可以在不影响现有设置的情况下引入新的网络功能。

发现

DNS 解析器能够通过 docker 组合服务的名称为该服务提供 IP。

例如,定义了 webdb 服务,并且 db 服务扩展到 3,所有 db 实例将解析:

$ docker-compose run --rm web nslookup db

Name:      db
Address 1: 172.22.0.4 composenetworks_db_2.composenetworks_mynet
Address 2: 172.22.0.5 composenetworks_db_3.composenetworks_mynet
Address 3: 172.22.0.3 composenetworks_db_1.composenetworks_mynet