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



(我这样做只是为了练习,了解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

但当我尝试使用我的主机电脑时,不起作用

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

ipPing,效果很好。

> 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

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

我想错了什么?

这是Giga评论的结果。如果您的/etc/hosts中没有主机名,那么这里就没有魔法了。

如果你需要ping健康检查,你可以使用docker-compose的健康检查所以,有了它,你可以随时查看动物园管理员是否还活着。

如果你坚持需要使用hostname进行ping,我建议你卷起袖子,使用docker格式制作一个bash脚本,比如。。。

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

然后每个集装箱都用集装箱名称做:

docker inspect <containerid> and extract the IP like you have [here.][2]

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

相关内容

  • 没有找到相关文章

最新更新