11

我需要知道在同一台机器上运行的某些容器的主机名(或 IP 地址)。正如我已经在这里评论过的(但还没有答案),我使用docker-compose. 文档说,compose将自动为同一docker-compose.yml文件中定义的所有容器创建一个主机名条目:

服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名被它们发现。

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

4

1 回答 1

15

Docker 1.10 引入了一些新的网络功能,其中包括一个用于 查找主机的内部 DNS 服务器

在默认的桥接网络 (docker0) 上,查找继续/etc/hosts按照它们过去的方式运行。/etc/resolv.conf将指向您的主机解析器。

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

保留了“旧版”设置,因此可以在不影响现有设置的情况下引入新的网络功能。

发现

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

例如,定义了webanddb服务,并且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
于 2016-09-05T08:35:35.003 回答