網站首頁 編程語言 正文
link機制介紹
同一個宿主機上的多個docker容器之間如果想進行通信,可以通過使用容器的ip地址來通信,也可以通過宿主機的ip加上容器暴露出的端口號來通信,前者會導致ip地址的硬編碼,不方便遷移,并且容器重啟后ip地址會改變,除非使用固定的ip,后者的通信方式比較單一,只能依靠監聽在暴露出的端口的進程來進行有限的通信。通過docker的link機制可以通過一個name來和另一個容器通信,link機制方便了容器去發現其它的容器并且可以安全的傳遞一些連接信息給其它的容器。docker run --link可以用來鏈接2個容器,使得源容器(被鏈接的容器)和接收容器(主動去鏈接的容器)之間可以互相通信,本質是接收容器的/etc/hosts會添加關于源容器的dns解析,接收容器可以通過容器名/容器id/alias訪問源容器,并且接收容器可以獲取源容器的一些數據,如源容器的環境變量。該機制的局限是dns解析只是單項的,接收容器只能dns解析源容器,而源容器無法dns解析接收容器。?
link使用
格式
--link <name or id>:alias
其中,name和id是源容器的name和id,alias是源容器在link下的別名
1、link 參數作用
同一個宿主主機上的多個docker容器之間如果需要進行通信,第一種最容易想到的方式就是使用容器自身的ip地址、宿主主機的ip+容器暴露出的端口號來通信,我們知道默認情況下docker重新run后,對應的IP地址就會改變,這樣如果兩個容器之間通信就會變得非常麻煩,每次都要修改通信的IP地址。這個時候 --link參數就派上大用場了,它會給要鏈接的容器設定一個通信的別名,即使重啟后IP地址發生了改變,依然可以正常通信。
2、命令格式
docker run -d --name myname--link toname:alisname -p 本地端口:容器端口 鏡像名稱
參數說明:
-- name:新容器名詞
-- link:目標容器名稱:別名
-p: 本地端口:容器端口
3、link原理
--link的原理就是在/etc/hosts里面添加了一個alias的名稱
4、測試案例
首先啟動一個tomcat01的容器
docker run -itd --name tomcat01 -p 8100:8080 tomcat:8.5.38
docker 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
5、link參數注意事項
- 使用link參數建立的容器所鏈接的主機需要處于運行狀態
- 所鏈接的容器也必須是運行狀態
- 使用link選項鏈接的主機ip不需要固定,因為每次新建容器都會檢查所鏈接容器的ip,并在/etc/hosts里生成新的alias 名稱對應的ip
原文鏈接:https://blog.csdn.net/xishining/article/details/127061707
相關推薦
- 2023-05-15 golang判斷結構體為空的問題_Golang
- 2022-07-08 教你利用python的matplotlib(pyplot)繪制折線圖和柱狀圖_python
- 2022-01-07 thymeleaf中th:include, th:insert, th:replace的區別
- 2023-04-07 C語言中如何利用循環嵌套輸出一個菱形_C 語言
- 2022-06-22 關于Pycharm配置翻譯插件Translation報錯更新TTK失敗不能使用的問題_python
- 2022-09-07 Golang必知必會之Go?Mod命令詳解_Golang
- 2022-10-16 Flask快速實現分頁效果示例_python
- 2022-07-26 Android自定義評分控件的完整實例_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支