我有一个名为 的容器中运行的 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 文件中添加示例命令以减少麻烦