在Docker容器之間如何進(jìn)行通信
在Docker容器之間進(jìn)行通信
1. 基于網(wǎng)絡(luò)模式的通信
橋接網(wǎng)絡(luò)(Bridge Network)
原理:
- 這是Docker默認(rèn)的網(wǎng)絡(luò)模式。
- 當(dāng)一個(gè)容器使用橋接網(wǎng)絡(luò)啟動(dòng)時(shí),Docker會(huì)為容器創(chuàng)建一個(gè)虛擬的以太網(wǎng)接口,并將其連接到一個(gè)名為
docker0(在Linux系統(tǒng)中)的虛擬網(wǎng)橋。 - 同一橋接網(wǎng)絡(luò)中的容器可以通過(guò)彼此的IP地址進(jìn)行通信。
操作示例:
- 創(chuàng)建一個(gè)橋接網(wǎng)絡(luò):
docker network create my - bridge - network
- 啟動(dòng)容器并連接到該網(wǎng)絡(luò)。
- 例如,啟動(dòng)兩個(gè)容器:
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ò)工具來(lái)測(cè)試通信。 - 例如,在
container2中安裝ping工具(如果沒(méi)有安裝)后,通過(guò)ping container1(container1是另一個(gè)容器的名稱,Docker會(huì)自動(dòng)解析名稱為對(duì)應(yīng)的IP地址)來(lái)檢查是否可以通信。
主機(jī)網(wǎng)絡(luò)(Host Network)
原理:
- 使用主機(jī)網(wǎng)絡(luò)模式的容器會(huì)直接共享宿主機(jī)的網(wǎng)絡(luò)命名空間。
- 這意味著容器和宿主機(jī)在網(wǎng)絡(luò)層面上幾乎是等同的,容器可以直接使用宿主機(jī)的IP地址和端口進(jìn)行通信,外部網(wǎng)絡(luò)也可以直接訪問(wèn)容器內(nèi)的服務(wù),就像這些服務(wù)是運(yùn)行在宿主機(jī)上一樣。
操作示例:
- 啟動(dòng)一個(gè)使用主機(jī)網(wǎng)絡(luò)的容器:
docker run -d --name container - host - network --network host nginx:latest
- 因?yàn)槿萜鞴蚕硭拗鳈C(jī)網(wǎng)絡(luò),所以可以通過(guò)訪問(wèn)宿主機(jī)的IP地址和容器內(nèi)服務(wù)對(duì)應(yīng)的端口(例如,對(duì)于Nginx服務(wù),訪問(wèn)宿主機(jī)的80端口)來(lái)訪問(wèn)容器內(nèi)的服務(wù)。
- 同時(shí),容器內(nèi)的服務(wù)也可以通過(guò)宿主機(jī)的網(wǎng)絡(luò)接口與外部網(wǎng)絡(luò)或者其他容器(如果有其他容器也使用主機(jī)網(wǎng)絡(luò)或者可以通過(guò)宿主機(jī)路由訪問(wèn))進(jìn)行通信。
容器網(wǎng)絡(luò)(Container Network)
原理:
- 這種模式下,新創(chuàng)建的容器會(huì)共享另一個(gè)容器的網(wǎng)絡(luò)命名空間。
- 這使得多個(gè)容器之間的網(wǎng)絡(luò)隔離性更強(qiáng),它們就像是在同一個(gè)網(wǎng)絡(luò)環(huán)境下的多個(gè)進(jìn)程。
- 通常用于一些需要緊密協(xié)作的容器,比如一個(gè)主容器和它的輔助容器。
操作示例:
- 首先啟動(dòng)一個(gè)基礎(chǔ)容器:
docker run -d --name base - container nginx:latest
- 然后啟動(dòng)另一個(gè)容器并共享
base - container的網(wǎng)絡(luò):
docker run -d --name shared - network - container --network container:base - container ubuntu:latest
- 這兩個(gè)容器可以通過(guò)本地回環(huán)地址(
127.0.0.1)或者共享的網(wǎng)絡(luò)接口進(jìn)行通信,就像它們是在同一個(gè)主機(jī)上的兩個(gè)進(jìn)程一樣。
2. 基于容器名稱的通信(通過(guò)自定義網(wǎng)絡(luò))
原理:
- 在自定義網(wǎng)絡(luò)(如橋接網(wǎng)絡(luò))中,Docker提供了基于容器名稱的自動(dòng)DNS解析功能。
- 當(dāng)容器連接到同一個(gè)自定義網(wǎng)絡(luò)時(shí),它們可以通過(guò)容器名稱來(lái)訪問(wèn)其他容器,而無(wú)需知道對(duì)方的IP地址。
- 這大大簡(jiǎn)化了容器之間的通信配置。
操作示例:
- 創(chuàng)建一個(gè)自定義網(wǎng)絡(luò):
docker network create my - custom - network
- 啟動(dòng)兩個(gè)容器并連接到該網(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中,可以通過(guò)http://web - container(假設(shè)web - container提供了HTTP服務(wù))來(lái)訪問(wèn)web - container內(nèi)的服務(wù)。 - Docker會(huì)自動(dòng)將容器名稱解析為對(duì)應(yīng)的IP地址,從而實(shí)現(xiàn)容器之間的通信。
3. 通過(guò)端口映射通信(用于跨網(wǎng)絡(luò)通信)
原理:
- 當(dāng)容器內(nèi)部的服務(wù)需要被外部網(wǎng)絡(luò)(包括其他容器所在的網(wǎng)絡(luò))訪問(wèn)時(shí),可以使用端口映射。
- 將容器內(nèi)的服務(wù)端口映射到宿主機(jī)的端口,外部網(wǎng)絡(luò)通過(guò)訪問(wèn)宿主機(jī)的端口來(lái)間接訪問(wèn)容器內(nèi)的服務(wù)。
- 這在容器需要與外部非Docker環(huán)境或者其他不在同一網(wǎng)絡(luò)的容器通信時(shí)非常有用。
操作示例:
- 啟動(dòng)一個(gè)帶有端口映射的容器:
docker run -d -p 8080:80 --name mapped - container nginx:latest
- 其他容器或者外部網(wǎng)絡(luò)可以通過(guò)訪問(wèn)宿主機(jī)的8080端口來(lái)訪問(wèn)
mapped - container內(nèi)的Nginx服務(wù)。 - 如果另一個(gè)容器也需要訪問(wèn)這個(gè)服務(wù),可以將請(qǐng)求發(fā)送到宿主機(jī)的8080端口,從而實(shí)現(xiàn)跨網(wǎng)絡(luò)通信。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Docker?容器跨主機(jī)通信?overlay的詳細(xì)步驟
- Docker網(wǎng)絡(luò)配置與自定義IP容器通信
- Docker 容器之間的互相通信實(shí)現(xiàn)示例
- Docker容器跨主機(jī)通信overlay網(wǎng)絡(luò)的解決方案
- Docker容器之間的通信的方法實(shí)現(xiàn)
- Docker容器間通信與外網(wǎng)通信的操作
- Docker容器連接相互通信的實(shí)現(xiàn)
- 詳解Docker 容器跨主機(jī)多網(wǎng)段通信解決方案
- Docker跨主機(jī)容器通信overlay實(shí)現(xiàn)過(guò)程詳解
- 詳解Docker容器跨主機(jī)通信的方法
- docker多個(gè)容器的相互通信實(shí)現(xiàn)步驟
相關(guān)文章
Docker安裝redis并且設(shè)置密碼,以及進(jìn)入容器修改密碼方式
這篇文章主要介紹了Docker安裝redis并且設(shè)置密碼,以及進(jìn)入容器修改密碼方式,2024-01-01
docker容器因報(bào)錯(cuò)無(wú)法啟動(dòng)問(wèn)題的檢查及修復(fù)容器錯(cuò)誤并重啟
隨著容器技術(shù)的發(fā)展,現(xiàn)在很多的應(yīng)用程序系統(tǒng)都會(huì)選擇使用docker容器進(jìn)行部署,下面這篇文章主要給大家介紹了關(guān)于docker容器因報(bào)錯(cuò)無(wú)法啟動(dòng)問(wèn)題的檢查及修復(fù)容器錯(cuò)誤并重啟的相關(guān)資料,需要的朋友可以參考下2023-03-03
docker配置鏡像Docker pull時(shí)報(bào)錯(cuò):https://registry-1.docker.io/v
Docker拉鏡像報(bào)錯(cuò)的原因可能是網(wǎng)絡(luò)問(wèn)題、認(rèn)證問(wèn)題、注冊(cè)中心URL不正確或注冊(cè)中心服務(wù)不可用,解決方法包括重載和重啟Docker服務(wù)2026-01-01
Rabbitmq heartbea心跳檢測(cè)機(jī)制原理解析
這篇文章主要介紹了Rabbitmq heartbea心跳檢測(cè)機(jī)制原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Docker 制作鏡像Dockerfile和commit操作
這篇文章主要介紹了Docker 制作鏡像Dockerfile和commit操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
docker commit與export區(qū)別小結(jié)
本文主要介紹了docker commit與export區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
docker部署nginx及nginx.conf文件配置方式
這篇文章主要介紹了docker部署nginx及nginx.conf文件配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

