如何让docker容器通过名字互相看到对方?

如何让docker容器通过名字互相看到对方?

我有一个名为 的容器中运行的 mongo 实例,mongo1该容器公开了端口 27017。我可以从主机顺利连接。

我有另一个容器正在运行想要连接到 mongo 实例的应用程序。

我如何连接这两个容器,以便将主机名mongo1暴露给另一个容器,并且它可以连接到mongo1:27017

答案1

发生的情况是默认的 docker 网络不允许name >> DNS映射。

默认桥接网络上的容器只能通过 IP 地址相互访问,除非您使用 --link 选项(该选项被视为旧选项)。在用户定义的桥接网络上,容器可以通过名称或别名相互解析。

因此我创建了一个新的网络:

docker network create -d bridge br0

然后将容器添加到该网络:

docker network connect br0 mongo1
docker network connect br0 wiki

现在他们可以通过名字互相看到对方。

答案2

对于现有容器(作为临时解决方案)

docker inspect <mango_container_name> | grep IPAddress

/etc/hosts并在容器内编辑/添加

docker exec -it -u 0 <app_container_name> bash

然后从容器内部使用 IP 地址映射容器名称。示例

echo "172.15.0.5 mango1" >> /etc/hosts

exit

......
或者你可以在启动容器时为其分配主机名

docker run -it -h mango1 mango_image

和/或echo "172.17.0.5 mango1" >> /etc/hosts在 docker 文件中添加示例命令以减少麻烦

相关内容