Docker 系列(二十九):容器互联

如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。

随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。

注意:--link 是 Docker 早期的传统互联方式,目前已被自定义 Docker 网络取代,这里按原文保留仅作了解,新项目不建议再使用。

新建网络

下面先创建一个新的 Docker 网络:

$ docker network create -d bridge my-net

-d 参数指定 Docker 网络类型,有 bridge、overlay 两种。其中 overlay 网络类型用于 Swarm mode,在本节中可以忽略它。

连接容器

运行一个容器并连接到新建的 my-net 网络:

$ docker run -it --rm --name busybox1 --network my-net busybox sh

打开新的终端,再运行一个容器并加入到 my-net 网络:

$ docker run -it --rm --name busybox2 --network my-net busybox sh

再打开一个新的终端查看容器信息:

$ docker container ls

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b47060aca56b        busybox             "sh"                11 minutes ago      Up 11 minutes                           busybox2
8720575823ec        busybox             "sh"                16 minutes ago      Up 16 minutes                           busybox1

下面通过 ping 来证明 busybox1 容器和 busybox2 容器建立了互联关系。

在 busybox1 容器输入以下命令:

/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

用 ping 来测试连接 busybox2 容器,它会解析成 172.19.0.3。

同理在 busybox2 容器执行 ping busybox1,也会成功连接到:

/ # ping busybox1
PING busybox1 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms

这样,busybox1 容器和 busybox2 容器就建立了互联关系。

如果你有多个容器之间需要互相连接,推荐使用 Docker Compose 来编排。

系列导航


   转载规则


《Docker 系列(二十九):容器互联》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Docker 系列(三十):配置容器 DNS Docker 系列(三十):配置容器 DNS
如何自定义配置容器的主机名和 DNS 呢?秘诀就是 Docker 利用虚拟文件来挂载容器的 3 个相关配置文件。 在容器中使用 mount 命令可以看到挂载信息: $ mount /dev/disk/by-uuid/1fec...ebdf
2023-03-07
下一篇 
Docker 系列(二十八):外部访问容器 Docker 系列(二十八):外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。 当使用 -P 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。 使用 docker container ls 可以看到
2023-02-21
  目录