我计划将我的单体服务器拆分为许多小型 docker 容器,但尚未找到“容器间通信”的良好解决方案。这是我的目标场景:
我知道如何将容器链接在一起以及如何公开端口,但这些解决方案都没有让我满意。
是否有任何解决方案可以像在传统服务器网络中那样通过主机名(容器名)在容器之间进行通信?
最佳答案
新的网络功能允许您通过以下方式连接到容器 他们的名字,所以如果你创建一个新网络,任何连接到的容器 该网络可以通过其名称访问其他容器。示例:
1) 创建新网络
$ docker network create <network-name>
2) 将容器连接到网络
$ docker run --net=<network-name> ...
或
$ docker network connect <network-name> <container-name>
3) 按名称 Ping 容器
docker exec -ti <container-name-A> ping <container-name-B>
64 bytes from c1 (172.18.0.4): icmp_seq=1 ttl=64 time=0.137 ms
64 bytes from c1 (172.18.0.4): icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from c1 (172.18.0.4): icmp_seq=3 ttl=64 time=0.074 ms
64 bytes from c1 (172.18.0.4): icmp_seq=4 ttl=64 time=0.074 ms
见 this文档部分;
注意:与旧版links
不同,新网络不会创建环境变量,也不会与其他容器共享环境变量。
此功能目前不支持别名
关于networking - 如何通过 "hostname"在 Docker 容器之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30545023/