在Docker容器之間如何進(jìn)行通信
更新時間:2024年11月27日 15:10:29 作者:騎上單車去旅行
本文介紹了Docker網(wǎng)絡(luò)模式,包括橋接網(wǎng)絡(luò)、主機(jī)網(wǎng)絡(luò)、容器網(wǎng)絡(luò)和基于容器名稱的通信,通過這些網(wǎng)絡(luò)模式,容器之間可以方便地進(jìn)行通信,實現(xiàn)跨網(wǎng)絡(luò)通信
在Docker容器之間進(jìn)行通信
1. 基于網(wǎng)絡(luò)模式的通信
橋接網(wǎng)絡(luò)(Bridge Network)
原理:
- 這是Docker默認(rèn)的網(wǎng)絡(luò)模式。
- 當(dāng)一個容器使用橋接網(wǎng)絡(luò)啟動時,Docker會為容器創(chuàng)建一個虛擬的以太網(wǎng)接口,并將其連接到一個名為
docker0(在Linux系統(tǒng)中)的虛擬網(wǎng)橋。 - 同一橋接網(wǎng)絡(luò)中的容器可以通過彼此的IP地址進(jìn)行通信。
操作示例:
- 創(chuàng)建一個橋接網(wǎng)絡(luò):
docker network create my - bridge - network
- 啟動容器并連接到該網(wǎng)絡(luò)。
- 例如,啟動兩個容器:
docker run -d --name container1 --network my - bridge - network nginx:latest docker run -d --name container2 --network my - bridge - network ubuntu:latest
- 在容器內(nèi)部,可以使用
ping命令或者其他網(wǎng)絡(luò)工具來測試通信。 - 例如,在
container2中安裝ping工具(如果沒有安裝)后,通過ping container1(container1是另一個容器的名稱,Docker會自動解析名稱為對應(yīng)的IP地址)來檢查是否可以通信。
主機(jī)網(wǎng)絡(luò)(Host Network)
原理:
- 使用主機(jī)網(wǎng)絡(luò)模式的容器會直接共享宿主機(jī)的網(wǎng)絡(luò)命名空間。
- 這意味著容器和宿主機(jī)在網(wǎng)絡(luò)層面上幾乎是等同的,容器可以直接使用宿主機(jī)的IP地址和端口進(jìn)行通信,外部網(wǎng)絡(luò)也可以直接訪問容器內(nèi)的服務(wù),就像這些服務(wù)是運(yùn)行在宿主機(jī)上一樣。
操作示例:
- 啟動一個使用主機(jī)網(wǎng)絡(luò)的容器:
docker run -d --name container - host - network --network host nginx:latest
- 因為容器共享宿主機(jī)網(wǎng)絡(luò),所以可以通過訪問宿主機(jī)的IP地址和容器內(nèi)服務(wù)對應(yīng)的端口(例如,對于Nginx服務(wù),訪問宿主機(jī)的80端口)來訪問容器內(nèi)的服務(wù)。
- 同時,容器內(nèi)的服務(wù)也可以通過宿主機(jī)的網(wǎng)絡(luò)接口與外部網(wǎng)絡(luò)或者其他容器(如果有其他容器也使用主機(jī)網(wǎng)絡(luò)或者可以通過宿主機(jī)路由訪問)進(jìn)行通信。
容器網(wǎng)絡(luò)(Container Network)
原理:
- 這種模式下,新創(chuàng)建的容器會共享另一個容器的網(wǎng)絡(luò)命名空間。
- 這使得多個容器之間的網(wǎng)絡(luò)隔離性更強(qiáng),它們就像是在同一個網(wǎng)絡(luò)環(huán)境下的多個進(jìn)程。
- 通常用于一些需要緊密協(xié)作的容器,比如一個主容器和它的輔助容器。
操作示例:
- 首先啟動一個基礎(chǔ)容器:
docker run -d --name base - container nginx:latest
- 然后啟動另一個容器并共享
base - container的網(wǎng)絡(luò):
docker run -d --name shared - network - container --network container:base - container ubuntu:latest
- 這兩個容器可以通過本地回環(huán)地址(
127.0.0.1)或者共享的網(wǎng)絡(luò)接口進(jìn)行通信,就像它們是在同一個主機(jī)上的兩個進(jìn)程一樣。
2. 基于容器名稱的通信(通過自定義網(wǎng)絡(luò))
原理:
- 在自定義網(wǎng)絡(luò)(如橋接網(wǎng)絡(luò))中,Docker提供了基于容器名稱的自動DNS解析功能。
- 當(dāng)容器連接到同一個自定義網(wǎng)絡(luò)時,它們可以通過容器名稱來訪問其他容器,而無需知道對方的IP地址。
- 這大大簡化了容器之間的通信配置。
操作示例:
- 創(chuàng)建一個自定義網(wǎng)絡(luò):
docker network create my - custom - network
- 啟動兩個容器并連接到該網(wǎng)絡(luò):
docker run -d --name web - container --network my - custom - network nginx:latest docker run -d --name app - container --network my - custom - network ubuntu:latest
- 在
app - container中,可以通過http://web - container(假設(shè)web - container提供了HTTP服務(wù))來訪問web - container內(nèi)的服務(wù)。 - Docker會自動將容器名稱解析為對應(yīng)的IP地址,從而實現(xiàn)容器之間的通信。
3. 通過端口映射通信(用于跨網(wǎng)絡(luò)通信)
原理:
- 當(dāng)容器內(nèi)部的服務(wù)需要被外部網(wǎng)絡(luò)(包括其他容器所在的網(wǎng)絡(luò))訪問時,可以使用端口映射。
- 將容器內(nèi)的服務(wù)端口映射到宿主機(jī)的端口,外部網(wǎng)絡(luò)通過訪問宿主機(jī)的端口來間接訪問容器內(nèi)的服務(wù)。
- 這在容器需要與外部非Docker環(huán)境或者其他不在同一網(wǎng)絡(luò)的容器通信時非常有用。
操作示例:
- 啟動一個帶有端口映射的容器:
docker run -d -p 8080:80 --name mapped - container nginx:latest
- 其他容器或者外部網(wǎng)絡(luò)可以通過訪問宿主機(jī)的8080端口來訪問
mapped - container內(nèi)的Nginx服務(wù)。 - 如果另一個容器也需要訪問這個服務(wù),可以將請求發(fā)送到宿主機(jī)的8080端口,從而實現(xiàn)跨網(wǎng)絡(luò)通信。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Docker?容器跨主機(jī)通信?overlay的詳細(xì)步驟
- Docker網(wǎng)絡(luò)配置與自定義IP容器通信
- Docker 容器之間的互相通信實現(xiàn)示例
- Docker容器跨主機(jī)通信overlay網(wǎng)絡(luò)的解決方案
- Docker容器之間的通信的方法實現(xiàn)
- Docker容器間通信與外網(wǎng)通信的操作
- Docker容器連接相互通信的實現(xiàn)
- 詳解Docker 容器跨主機(jī)多網(wǎng)段通信解決方案
- Docker跨主機(jī)容器通信overlay實現(xiàn)過程詳解
- 詳解Docker容器跨主機(jī)通信的方法
- docker多個容器的相互通信實現(xiàn)步驟
相關(guān)文章
Docker 安裝 Nginx 并掛載目錄的實現(xiàn)示例
本文介紹了如何使用Docker拉取Nginx鏡像、創(chuàng)建容器,并設(shè)置掛載目錄,掛載目錄用于將容器內(nèi)配置文件與主機(jī)關(guān)聯(lián),便于直接修改影響容器配置,感興趣的可以了解一下2024-10-10
基于Docker部署Dubbo+Nacos服務(wù)的過程
這篇文章主要介紹了基于Docker部署Dubbo+Nacos服務(wù),本文介紹基于?Docker?部署一套?Dubbo?+?Nacos?的微服務(wù)環(huán)境,并解決容器里的?IP?及端口的訪問問題,需要的朋友可以參考下2023-02-02

