networking - 如何通过 "hostname"在 Docker 容器之间进行通信

标签 networking docker

我计划将我的单体服务器拆分为许多小型 docker 容器,但尚未找到“容器间通信”的良好解决方案。这是我的目标场景:

Target scenario

我知道如何将容器链接在一起以及如何公开端口,但这些解决方案都没有让我满意。

是否有任何解决方案可以像在传统服务器网络中那样通过主机名(容器名)在容器之间进行通信?

最佳答案

新的网络功能允许您通过以下方式连接到容器 他们的名字,所以如果你创建一个新网络,任何连接到的容器 该网络可以通过其名称访问其他容器。示例:

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/

相关文章:

networking - 为什么无法从同一网络中的另一台电脑接收 rtp 流?

networking - 如何设置通信受限的 Docker 网络?

docker - 访问 Docker 容器内的文件

java - Java 的 Docker 插件问题 (fabric8io)

docker - 从Docker容器访问主机的文件夹

mongodb - 为什么在尝试连接到运行简单 mongo 容器的 OKD pod 时出现 "message len 1347703880 is invalid. Min 16 Max: 48000000"错误?

Docker:在分配给网络的默认值中找不到可用的、不重叠的 IPv4 地址池

linux - 如果我在 Linux 上使用原始套接字,内核是否会丢弃带有错误 TCP 校验和的传入数据包?

asynchronous - 通过多个 UDP 端口传递数据是否会提高性能

spring - 在Docker容器中运行时找不到Eureka服务