How do docker containers resolve hostname of other docker containers running on the same machine?

你。 提交于 2019-12-13 13:34:30

问题


I have started to use docker and liking it mostly because Docker containers are kind of light-weight VMs. But I am unable to figure out, how docker containers may be able resolve each-other's hostnames. They can connect to each other using there IPs, but not using their hostnames, I cannot even edit /etc/hosts in the containers to make up for that somehow. When I restart the containers, they get different IPs and hence I want to use the hostnames in place of IPs to communicate with each other. Let us say, I want to run Zookeeper instances of a Zookeeper cluster in the containers and I want to put the hostnames of the Zookeeper servers in the config (zoo.cfg) files.


回答1:


It may be worth checking out Docker links (https://docs.docker.com/userguide/dockerlinks/). When you link to a running container, a host entry is added for the container you wish to connect to.

In their example they show

$ 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

As you see here, they link the application they're in bash with to the container named db, and subsequently a host entry is added for db with the IP address of that container.

So in the instance of having zookeeper running, you could simply make the containers you start just link to zookeeper. I hope this helps!




回答2:


As of Docker 1.10, if you create a distinct docker network, Docker will resolve hostnames intra-container-wise using an internal DNS server [1][2][3]. You can change the network hostname by specifying one with --name within the docker run. Otherwise the hostname will refer to the container id (12 char long hash, shown by docker container ls ).

See also:

  • Docker doesn't resolve hostname

  • When to use --hostname in docker?

Sources:

[1] = docker docs - Embedded DNS server in user-defined networks

[2] = Docker Engine release notes - 1.10.0 (2016-02-04) - Networking

[3] = Docker pull requests - Vendoring libnetwork



来源:https://stackoverflow.com/questions/26269870/how-do-docker-containers-resolve-hostname-of-other-docker-containers-running-on

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!