我需要知道在同一台机器上运行的某个容器的主机名(或IP地址)。
正如我已经评论here(但尚未回答),我使用docker-compose
。 documentation表示,compose将自动为同一docker-compose.yml
文件中定义的所有容器创建主机名条目:
服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名发现。
但是我无法通过docker exec -it my_container tail -20 /etc/hosts
看到任何主机条目。
我还尝试将links
添加到我的容器中,但没有任何改变。
答案 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。
例如,如果定义了web
和db
服务,并且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