我們知道默認(rèn)情況下docker重新run后,對(duì)應(yīng)的IP地址就會(huì)改變,這樣如果兩個(gè)容器之間通信就會(huì)變得非常麻煩,每次都要修改通信的IP地址。這個(gè)時(shí)候 --link參數(shù)就派上大用場(chǎng)了,它會(huì)給要鏈接的容器設(shè)定一個(gè)通信的別名,即使重啟后IP地址發(fā)生了改變,依然可以正常通信。
link 參數(shù)作用
同一個(gè)宿主主機(jī)上的多個(gè)docker容器之間如果需要進(jìn)行通信,第一種最容易想到的方式就是使用容器自身的ip地址、宿主主機(jī)的ip+容器暴露出的端口號(hào)來(lái)通信,我們知道默認(rèn)情況下docker重新run后,對(duì)應(yīng)的IP地址就會(huì)改變,這樣如果兩個(gè)容器之間通信就會(huì)變得非常麻煩,每次都要修改通信的IP地址。這個(gè)時(shí)候 --link參數(shù)就派上大用場(chǎng)了,它會(huì)給要鏈接的容器設(shè)定一個(gè)通信的別名,即使重啟后IP地址發(fā)生了改變,依然可以正常通信。
命令格式
docker run -d --name myname--link toname:alisname -p 本地端口:容器端口 鏡像名稱
參數(shù)說(shuō)明:
- -- name:新容器名詞
- -- link:目標(biāo)容器名稱:別名
- -p:本地端口:容器端口
link原理
--link的原理就是在/etc/hosts里面添加了一個(gè)alias的名稱
測(cè)試
首先啟動(dòng)一個(gè)tomcat01的容器
docker run -itd --name tomcat01 -p 8100:8080 tomcat:8.5.38
docker ps 獲取容器的id d92f947ea54f

獲取單個(gè)容器 ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' d92f947ea54f

啟動(dòng)一個(gè)nginx容器設(shè)置與tomcat01連通
docker run -itd --name nginx01 --link tomcat01 nginx
進(jìn)入容器內(nèi)部查看 etc/hosts配置文件
docker exec -it nginx01 /bin/bash #進(jìn)入容器內(nèi)部
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
測(cè)試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參數(shù)注意事項(xiàng)
- 使用link參數(shù)建立的容器所鏈接的主機(jī)需要處于運(yùn)行狀態(tài)
- 所鏈接的容器也必須是運(yùn)行狀態(tài)
- 使用link選項(xiàng)鏈接的主機(jī)ip不需要固定,因?yàn)槊看涡陆ㄈ萜鞫紩?huì)檢查所鏈接容器的ip,并在/etc/hosts里生成新的alias 名稱對(duì)應(yīng)的ip?
