我已经开始使用docker了,并且很喜欢它,因为Docker容器是一种轻量级的VM。但我无法理解,docker容器如何能够解析彼此的主机名。它们可以使用这些up相互连接,但不能使用它们的主机名,我甚至不能编辑容器中的/etc/hosts来弥补这一点。当我重新启动容器时,它们会获得不同的in,因此我希望使用主机名来代替in来相互通信。比方说,我想在容器中运行Zookeeper集群的Zookeeper实例,并将Zookeeper服务器的主机名放在配置(zoo.cfg)文件中。
发布于 2017-10-25 19:47:21
从docker 1.10开始,如果您创建了一个独立的Docker网络,Docker将使用内部DNS服务器13在容器内解析主机名。您可以通过在docker run内指定一个--name来更改网络主机名。否则,主机名将引用容器id (12个字符的哈希,由docker container ls显示)。
另请参阅:
资料来源:
1= docker docs - Embedded DNS server in user-defined networks
2= Docker Engine release notes - 1.10.0 (2016-02-04) - Networking
发布于 2014-10-09 16:54:11
查看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正如您在这里看到的,它们将bash中使用的应用程序链接到名为db的容器,随后使用该容器的IP地址为db添加了一个主机条目。
因此,在运行zookeeper的实例中,您只需将启动的容器链接到zookeeper即可。我希望这能帮到你!
发布于 2020-05-15 23:42:23
可以依赖于容器的操作系统,但假设容器运行Linux,您可以这样检查您的DNS配置:
cat /etc/resolv.conf 它可以返回如下内容:
nameserver 127.0.0.11
options ndots:0/etc/resolv.conf是类UNIX OS-es中DNS的标准配置文件。在本例中,容器被配置为使用127.0.0.11作为DNS服务器。因此容器可以查询它,以使用它的主机名确定另一个容器的IP地址。您可以使用nslookup命令检查该主机是否实际工作,例如:
nslookup redis 127.0.0.11,它将联系DNS服务器127.0.0.11并请求解析主机名"redis“。它可以返回如下内容:
Server: 127.0.0.11
Address 1: 127.0.0.11
Name: redis
Address 1: 172.21.0.3 counter-app_redis_1.counter-app_counter-net 这意味着主机名将解析为ip 172.21.0.3。
在此特定情况下,通过使用docker-compose.yml配置文件中的以下条目添加了名称服务器条目:
...
networks:
counter-net:此根条目配置了由多个docker容器共享的公共网桥网络。
https://stackoverflow.com/questions/26269870
复制相似问题