同一个宿主主机上的多个docker容器之间如果需要进行通信,第一种最容易想到的方式就是使用容器自身的ip地址、宿主主机的ip+容器暴露出的端口号来通信,我们知道默认情况下docker重新run后,对应的IP地址就会改变,这样如果两个容器之间通信就会变得非常麻烦,每次都要修改通信的IP地址。这个时候 —link参数就派上大用场了,它会给要链接的容器设定一个通信的别名,即使重启后IP地址发生了改变,依然可以正常通信。
命令格式
docker run –d –name myname–link toname:alisname -p 本地端口:容器端口 镜像名称参数说明:
— name:新容器名词 — link:目标容器名称:别名 -p:本地端口:容器端口 link原理–link的原理就是在/etc/hosts里面添加了一个alias的名称
测试首先启动一个tomcat01的容器
docker run –itd –name tomcat01 -p 8100:8080 tomcat:8.5.38docker ps 获取容器的id d92f947ea54f
获取单个容器 ip
docker inspect –f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} d92f947ea54f
启动一个nginx容器设置与tomcat01连通
docker run –itd –name nginx01 –link tomcat01 nginx进入容器内部查看 etc/hosts配置文件
docker exec –it nginx01 /bin/bash #进入容器内部 apt update && apt install –y iproute2 # 安装ping命令 cat /etc/hosts #查看配置文件 127.0.0.1 localhost ::1 localhost ip6–localhost ip6–loopback fe00::0 ip6–localnet ff00::0 ip6–mcastprefix ff02::1 ip6–allnodes ff02::2 ip6–allrouters 172.17.0.4 tomcat01 d92f947ea54f 172.17.0.6 70aa4c7dde72测试nginx01 ping tomcat01
docker exec –it nginx01 ping tomcat01 PING tomcat01 (172.18.0.2): 56 data bytes 64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.102 ms 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.093 ms 64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.110 ms 64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.073 ms link参数注意事项 使用link参数建立的容器所链接的主机需要处于运行状态 所链接的容器也必须是运行状态 使用link选项链接的主机ip不需要固定,因为每次新建容器都会检查所链接容器的ip,并在/etc/hosts里生成新的alias 名称对应的ip
原文地址:https://mp.weixin.qq.com/s/m4NyVDPB20NNi0ZWm4pP-g