Docker實現(xiàn)容器之間通信的多種方式
一、Docker 容器間通信的本質(zhì)是什么?
容器之間通信依賴 Docker 網(wǎng)絡(luò)(Network),默認有幾種網(wǎng)絡(luò)類型:
| 類型 | 描述 |
|---|---|
| bridge | 默認網(wǎng)絡(luò),同一網(wǎng)橋內(nèi)容器可以通過容器名通信 |
| host | 共享宿主機網(wǎng)絡(luò),無隔離(無端口映射) |
| none | 容器無網(wǎng)絡(luò),僅用于極端隔離場景 |
| overlay | 用于 Docker Swarm 集群通信 |
二、常用容器通信方式
1. **橋接網(wǎng)絡(luò)(默認)**下的通信
方法一:通過容器名稱訪問
默認容器在 bridge 網(wǎng)絡(luò)中可以通過 名稱解析容器名 → 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
可用于微服務(wù)中服務(wù)間調(diào)用,如:
http://container-a:8080/api/...
方法二:共享同一網(wǎng)絡(luò)(如 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 網(wǎng)絡(luò)模式下通信
容器共享宿主機網(wǎng)絡(luò),無端口映射限制,適合需要 UDP、低延遲通信:
docker run --network host my-app
注意:
- 所有容器共享端口空間,避免端口沖突
- 容器可以通過
localhost訪問宿主其他服務(wù)
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 網(wǎng)絡(luò)命令速查
| 命令 | 說明 |
|---|---|
| docker network ls | 查看所有網(wǎng)絡(luò) |
| docker network inspect mynet | 查看某網(wǎng)絡(luò)下容器信息(IP等) |
| docker network create mynet | 創(chuàng)建自定義網(wǎng)絡(luò) |
| docker network connect | 把容器加入到一個網(wǎng)絡(luò) |
| docker network disconnect | 移除容器的網(wǎng)絡(luò)連接 |
四、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與數(shù)據(jù)庫通信 - 不用寫 IP,容器名即服務(wù)名,Compose 默認建立 bridge 網(wǎng)絡(luò)
五、最佳實踐小結(jié)
| 場景 | 推薦方案 |
|---|---|
| 同機通信 | 自定義 bridge 網(wǎng)絡(luò),容器名互通 |
| 簡化開發(fā) | 用 docker-compose 管理服務(wù) |
| 性能要求高 | 使用 --network host |
| 集群通信 | 使用 overlay 網(wǎng)絡(luò)(Docker Swarm) |
補充:容器 DNS 是怎么解析的?
Docker 默認為每個網(wǎng)絡(luò)分配一個 DNS 服務(wù),容器名在網(wǎng)絡(luò)中解析為容器 IP:
# 容器內(nèi) nslookup web
你會看到:web 自動解析成 IP 地址。
總結(jié)
| 通信方式 | 說明與特點 |
|---|---|
| 通過容器名通信 | 推薦,自定義網(wǎng)絡(luò)或 docker-compose 默認支持 |
| 宿主機 IP + 映射端口 | 最通用但性能差 |
| host 網(wǎng)絡(luò)通信 | 高性能但需管理端口沖突 |
| overlay 網(wǎng)絡(luò)通信 | 多主機通信(Swarm/集群用) |
以上就是Docker實現(xiàn)容器之間通信的多種方式的詳細內(nèi)容,更多關(guān)于Docker容器間通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用 Docker 在 Ubuntu 上部署 FTP 服務(wù)器
本文詳細介紹了如何在Ubuntu系統(tǒng)上通過Docker部署FTP服務(wù)器的步驟,包括安裝Docker、拉取vsftpd鏡像以及運行FTP容器等,通過這些步驟,用戶可以在提供的免費云服務(wù)器上快速搭建起一個安全高效的FTP服務(wù),適合小型項目或個人使用,感興趣的朋友跟隨小編一起看看吧2024-10-10
docker容器因報錯無法啟動問題的檢查及修復(fù)容器錯誤并重啟
隨著容器技術(shù)的發(fā)展,現(xiàn)在很多的應(yīng)用程序系統(tǒng)都會選擇使用docker容器進行部署,下面這篇文章主要給大家介紹了關(guān)于docker容器因報錯無法啟動問題的檢查及修復(fù)容器錯誤并重啟的相關(guān)資料,需要的朋友可以參考下2023-03-03
docker?build運行報錯source:?not?found解決分析
這篇文章主要為大家介紹了docker?build運行報錯source:?not?found解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Docker獲取鏡像報錯docker: Error response from daemon
這篇文章主要介紹了Docker獲取鏡像報錯docker: Error response from daemon, 出現(xiàn)了鏡像獲取報錯的問題,找到了解決的方法記一下,需要的朋友可以參考下2018-08-08

