如何通过主机名访问Docker容器?(从我的主机PC中访问)

问题描述 投票:0回答:2

((我只是为了练习,是为了了解docker。)

我的主机是ubuntu 18.04 LTS。这是我的docker-compose文件(默认网络模式为网桥)。

version: "2"
services:
  zookeeper1:
    image: wurstmeister/zookeeper
  zookeeper2:
    image: wurstmeister/zookeeper
  zookeeper3:
    image: wurstmeister/zookeeper

在docker容器中,他们可以找到彼此。

> docker container exec -it 8b1c2b412989 ping zookeeper2
PING zookeeper2 (172.19.0.3) 56(84) bytes of data.
64 bytes from setup-zookeeper-kafka_zookeeper2_1.setup-zookeeper-kafka_default (172.19.0.3): icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from setup-zookeeper-kafka_zookeeper2_1.setup-zookeeper-kafka_default (172.19.0.3): icmp_seq=2 ttl=64 time=0.129 ms

但是当我尝试使用主机PC时,它不起作用

> ping zookeeper2
ping: zookeeper2: Name or service not known

> ping 8b1c2b412989 # container id also doesn't work
ping: 8b1c2b412989: Name or service not known

ip ping,效果很好。

> ping 172.19.0.3
PING 172.19.0.3 (172.19.0.3) 56(84) bytes of data.
64 bytes from 172.19.0.3: icmp_seq=1 ttl=64 time=0.142 ms
64 bytes from 172.19.0.3: icmp_seq=2 ttl=64 time=0.046 ms

我添加了hostname属性,它仍然无法正常工作。

version: "2"
services:
  zookeeper1:
    hostname: zookeeper1
    image: wurstmeister/zookeeper
  zookeeper2:
    hostname: zookeeper2
    image: wurstmeister/zookeeper
  zookeeper3:
    hostname: zookeeper3
    image: wurstmeister/zookeeper

如何从主机PC访问具有主机名的容器?现在,我只能使用ports选项。(或者我必须写静态IP地址)

我在想什么错?

docker ubuntu hostname docker-networking
2个回答
0
投票

Docker不会自动更新您的主机/ etc / hosts文件,因此您无法通过主机名来访问主机。您可以为docker-compose手动编写包装器,这将更新主机的/ etc / hosts文件。但是另一个问题是,为什么需要它。


0
投票

正如Giga所说的那样。如果您的/ etc / hosts中没有主机名,则这里没有魔术。

如果您需要ping进行健康检查,则可以使用docker-compose's healthcheck因此,有了它,您就可以随时查看动物园管理员是否还活着。

如果您坚持要使用主机名ping,我建议袖手旁观,并使用docker格式(如...)制作bash脚本,>

docker ps --format "table {{.ID}}\t{{.Ports}}" 

然后对每个具有容器名称的containerid执行:

docker inspect <containerid> and extract the IP like you have [here.][2]
© www.soinside.com 2019 - 2024. All rights reserved.