Docker无法解析主机名

时间:2016-09-05 08:14:06

标签: docker docker-compose docker-networking

我需要知道在同一台机器上运行的某个容器的主机名(或IP地址)。 正如我已经评论here(但尚未回答),我使用docker-composedocumentation表示,compose将自动为同一docker-compose.yml文件中定义的所有容器创建主机名条目:

  

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

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

1 个答案:

答案 0 :(得分:6)

Docker 1.10 introduced some new networking features包含internal DNS server,其中主机查找已完成。

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

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

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

发现

DNS解析器能够通过该服务的名称为docker compose服务提供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