網站首頁 編程語言 正文
1.1、容器間通過IP進行網絡訪問
新建兩個容器tomcat01和tomcat02
docker run -d -P --name tomcat01 tomcat docker run -d -P --name tomcat02 tomcat
使用 ifconfig 命令查看toncat01的網卡信息:
可以看到,tomcat01的IP地址為 172.17.0.2
再查看toncat02的網卡信息:
可以看到,tomcat02的IP地址為 172.17.03
測試容器tomcat01和tomcat02是否能ping通:
tomcat01 ping tomcat02:
tomcat02 ping tomcat01:
根據上面兩張圖所示,不管是tomcat01 ping tomcat02還是tomcat02 ping tomcat01都是可以ping通的。
注:如果容器內沒有ifconfig命令和ping命令,依次執行以下命令:
apt-get update apt install iputils-ping apt install net-tools
1.2、容器間通過容器名或容器id進行網絡訪問
容器間如果想通過容器名進行網絡連接,需要使用 docker run --link 來鏈接兩個容器。
–link可以用來鏈接2個容器,使得源容器(被鏈接的容器)和接收容器(主動去鏈接的容器)之間可以互相通信,并且接收容器可以獲取源容器的一些數據,如源容器的環境變量。
–link 的格式
--link <name or id>:alias
–link 添加到另一個容器的鏈接
name和id是源容器的name和id,alias是源容器在link下的別名。
–link 的使用實例
創建容器tomcat03,讓tomcat03作為接收容器(主動去鏈接的容器),上面的tomcat01(別名t1)作為源容器(被鏈接的容器),兩個容器進行鏈接:
docker run -d -P --name tomcat03 --link tomcat01:t1 tomcat
tomcat01 是上面啟動的 7b94f50c43ea 容器的名字,這里作為源容器,t1 是該容器在link下的別名(alias),通俗易懂的講,站在tomcat03容器的角度,tomcat01 和 t1 都是 7b94f50c43ea 容器的名字,并且作為容器的hostname,tomcat03 用這2個名字中的哪一個都可以訪問到 7b94f50c43ea 容器并與之通信(docker通過DNS自動解析)。
進行鏈接測試:tomcat03 ping tomcat01
ping tomcat01
ping t1
兩個都能ping通,可見,tomcat01 和 t1 都指向172.17.0.2。
但上面這種鏈接只是單向的,就是只能接收容器鏈接源容器,源容器不能鏈接到接收容器,也就是 tomcat03 鏈接上了 tomcat01,tomcat03能ping通tomcat01,tomcat01并沒有鏈接上tomcat03,tomcat01ping不同tomcat03。但是不影響tomcat01 通過IP ping tomcat03 或者tomcat03 ping tomcat01。
–link 原理
查看 tomcat03 的 hosts 文件,操作系統規定,在進行DNS請求以前,先檢查系自己的hosts文件中是否有這個域名和IP的映射關系。如果有,則直接訪問這個IP地址指定的網絡位置,如果沒有,再向已知的DNS服務器提出域名解析請求。
docker exec -it tomcat03 cat /etc/hosts
在tomcat03的hosts配置文件中,可以看到映射了tomcat01的IP、容器名、別名和容器id,所有tomcat03可以通過指定的容器名和tomcat01進行通信。
–link 就是在接收容器(這里是名為tomcat003的容器)添加了一條關于tomcat01容器的名稱解析。有了這個名稱解析后就可以不使用ip來和源容器通信了,除此之外當源容器重啟,docker會負責更新/etc/hosts文件,因此可以不用擔心容器重啟后IP地址發生了改變,解析無法生效的問題。
原文鏈接:https://blog.csdn.net/wpc2018/article/details/122188197
相關推薦
- 2023-07-26 webpack提供構建速度之打包開啟多進程(thead)
- 2023-01-19 python使用?f?格式化字符串的用法_python
- 2022-03-12 C++實現堆排序實例介紹_C 語言
- 2022-09-08 python輾轉相除法求最大公約數和最小公倍數的實現_python
- 2022-07-13 Zookeeper集群 + Kafka集群
- 2022-09-14 React路由組件傳參的三種方式(params、search、state)_React
- 2022-11-09 GO?語言運行環境的基礎知識_Golang
- 2022-05-09 Python使用Plotly繪制常見5種動態交互式圖表_python
- 最近更新
-
- 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同步修改后的遠程分支