Docker中容器間的通訊方式:1、利用容器ip存取;2、利用宿主機的「ip:port」存取;3、利用link建立連線進行通訊;4、利用「User-defined networks」進行通訊。
本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。
1.透過容器ip存取
容器重新啟動後,ip會發生變化。透過容器ip存取不是一個好的方案。
2.透過宿主機的ip:port存取
透過宿主機的ip:port訪問,只能依靠監聽在暴露出的連接埠的進程來進行有限的通訊。
3.透過link建立連線(官方不建議使用)
運作容器時,指定參數link,使得來源容器與被連結的容器可以進行相互通信,並且接受的容器可以獲得來源容器的一些數據,例如:環境變數。
# 源容器:mysql docker run -itd --name test-mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7 #被链接容器 centos docker run -itd --name test-centos --link test-mysql:mysql centos /bin/bash #进入test-centos docker exec -it test-centos /bin/bash
直接透過link的名字或是link時候取的別名就能進入:
透過link建立連接的容器,被連結的容器能ping 通源容器,反過來不行。
在被連結的容器上查看環境變數
被連結容器會繼承來源容器的環境變數資訊。
與/etc/hosts中的主機項目不同,如果重新啟動來源容器,則不會自動更新儲存在環境變數中的IP位址。我們建議使用主機條目 /etc/hosts來解析連結容器的IP位址。
除了環境變數之外,Docker還將來源容器的主機項目加入/etc/hosts檔案中。
如果重新啟動來源容器,/etc/hosts連結容器上的檔案將使用來源容器的新IP位址自動更新,從而允許連結通訊繼續。
4.透過User-defined networks(推薦)
docker network來建立一個橋接網絡,在docker run的時候將容器指定到新建立的橋接網絡中,這樣同一橋接網絡中的容器就可以透過互相存取。
建立網路
docker network create test-network
啟動容器時,加入已建立的網路
docker run -it --network test-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7
啟動被連結的容器
docker run -it --network test-network --network-alias centos centos /bin/bash
推薦學習:《docker影片教學》
以上是Docker中容器間的通訊方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!