Docker實現(xiàn)容器之間通信的多種方式
一、Docker 容器間通信的本質是什么?
容器之間通信依賴 Docker 網絡(Network),默認有幾種網絡類型:
| 類型 | 描述 |
|---|---|
| bridge | 默認網絡,同一網橋內容器可以通過容器名通信 |
| host | 共享宿主機網絡,無隔離(無端口映射) |
| none | 容器無網絡,僅用于極端隔離場景 |
| overlay | 用于 Docker Swarm 集群通信 |
二、常用容器通信方式
1. **橋接網絡(默認)**下的通信
方法一:通過容器名稱訪問
默認容器在 bridge 網絡中可以通過 名稱解析容器名 → IP 進行通信:
docker network create mynet docker run -dit --name container-a --network mynet alpine sh docker run -dit --name container-b --network mynet alpine sh
然后進入 container-b,ping container-a 即可:
ping container-a
可用于微服務中服務間調用,如:
http://container-a:8080/api/...
方法二:共享同一網絡(如 docker-compose 自動創(chuàng)建)
version: '3'
services:
web:
image: nginx
app:
image: my-java-app
depends_on:
- web
web的容器名稱就是webapp中可通過web:80與其通信,無需指定 IP
2. host 網絡模式下通信
容器共享宿主機網絡,無端口映射限制,適合需要 UDP、低延遲通信:
docker run --network host my-app
注意:
- 所有容器共享端口空間,避免端口沖突
- 容器可以通過
localhost訪問宿主其他服務
3. 端口 暴露 + 宿主機 IP 通信(最通用但低效)
每個容器通過 -p 映射端口 暴露到宿主機:
docker run -p 8080:8080 --name web my-web docker run -p 8081:8081 --name app my-app
此時容器間不能直接通信,只能通過宿主 IP 和端口:
curl http://host-ip:8080/
三、Docker 網絡命令速查
| 命令 | 說明 |
|---|---|
| docker network ls | 查看所有網絡 |
| docker network inspect mynet | 查看某網絡下容器信息(IP等) |
| docker network create mynet | 創(chuàng)建自定義網絡 |
| docker network connect | 把容器加入到一個網絡 |
| docker network disconnect | 移除容器的網絡連接 |
四、docker-compose 中容器通信最佳實踐
version: '3'
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
app:
image: my-java-app
depends_on:
- mysql
environment:
DB_HOST: mysql
- app 可以用
mysql:3306與數據庫通信 - 不用寫 IP,容器名即服務名,Compose 默認建立 bridge 網絡
五、最佳實踐小結
| 場景 | 推薦方案 |
|---|---|
| 同機通信 | 自定義 bridge 網絡,容器名互通 |
| 簡化開發(fā) | 用 docker-compose 管理服務 |
| 性能要求高 | 使用 --network host |
| 集群通信 | 使用 overlay 網絡(Docker Swarm) |
補充:容器 DNS 是怎么解析的?
Docker 默認為每個網絡分配一個 DNS 服務,容器名在網絡中解析為容器 IP:
# 容器內 nslookup web
你會看到:web 自動解析成 IP 地址。
總結
| 通信方式 | 說明與特點 |
|---|---|
| 通過容器名通信 | 推薦,自定義網絡或 docker-compose 默認支持 |
| 宿主機 IP + 映射端口 | 最通用但性能差 |
| host 網絡通信 | 高性能但需管理端口沖突 |
| overlay 網絡通信 | 多主機通信(Swarm/集群用) |
以上就是Docker實現(xiàn)容器之間通信的多種方式的詳細內容,更多關于Docker容器間通信的資料請關注腳本之家其它相關文章!
相關文章
Docker?Windows最新版(4.17.x)修改鏡像存儲路徑的詳細步驟
這篇文章主要介紹了Docker?WIndows最新版(4.17.x)修改鏡像存儲路徑的步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
Spring?Boot?分層打包?Docker?鏡像實踐及分析(推薦)
這篇文章主要介紹了Spring?Boot?分層打包?Docker?鏡像實踐及分析,本文通過圖文并茂的形式實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下2021-12-12
docker compose安裝es+kibana 8.12.2的詳細過程
因云平臺需要改造,es7升級為es8,所以記錄一下,es8需要開啟ssl認證,需要配置證書,全本帶你用docker安裝,便于后面es8的學習,這篇文章主要介紹了docker compose安裝es+kibana 8.12.2的詳細過程,感興趣的朋友跟隨小編一起看看吧2024-05-05

