Docker 通过主机的主机名访问容器

Docker 通过主机的主机名访问容器,docker,networking,containers,overlay,Docker,Networking,Containers,Overlay,我有一些码头集装箱联合单一码头覆盖网络。 在此网络下,每个容器都通过主机名(容器的)进行访问。但我无法通过主机mashine(我真正的主机)的主机名访问容器 如何从我的真实机器上通过docker容器主机名访问容器?您只需将127.0.0.1添加到您的主机文件(在您的本地机器上)您可以通过启动自己的DNS解析程序容器来实现 docker run -d --name devdns -p 53:53/udp \ -v /var/run/docker.sock:/var/run/docker.soc

我有一些码头集装箱联合单一码头覆盖网络。 在此网络下,每个容器都通过主机名(容器的)进行访问。但我无法通过主机mashine(我真正的主机)的主机名访问容器


如何从我的真实机器上通过docker容器主机名访问容器?

您只需将
127.0.0.1
添加到您的
主机
文件(在您的本地机器上)

您可以通过启动自己的DNS解析程序容器来实现

docker run -d --name devdns -p 53:53/udp \
  -v /var/run/docker.sock:/var/run/docker.sock ruudud/devdns
一旦您运行了DNS服务器。服务器将映射到您的本地主机。在linux上,您可以编辑
/etc/resolv.conf
,并在顶部添加
名称服务器127.0.0.1
。此更改将在重新启动后恢复

现在如果你启动一个docker容器

docker run -d --hostname tarunlalwani --name tlalwani ubuntu:16.04 sleep 2000
现在,您可以使用容器名称或主机名ping容器

$ ping tlalwani.dev
PING tlalwani.dev (172.17.0.6) 56(84) bytes of data.
64 bytes from 172.17.0.6: icmp_seq=1 ttl=64 time=0.030 ms

$ ping tarunlalwani.dev
PING tarunlalwani.dev (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.026 ms

dev
是默认域名。您可以使用环境变量更改此名称。有关更多详细信息,请参阅

如果我们将服务与公共端口一起使用,这将是有效的。但情况是:有一些具有相同端口的容器,我们应该访问每个容器。这是一种方式!我们可以在没有域名的情况下使用吗?例如:$ping Tlalwani您可以,但您必须自己构建映像并自定义run.sh()