Docker 網絡是容器通信的核心基礎,它允許容器之間、容器與主機之間以及容器與外部網絡之間進行數據交互。Docker 提供了多種網絡驅動類型,適用于不同場景,下面詳細介紹 Docker 網絡的設置方式。
一、Docker 網絡的基本概念
Docker 網絡通過驅動程序(Driver) 實現不同的網絡模式,核心作用是:
- 隔離容器網絡環境
- 實現容器間通信
- 控制容器與外部網絡的連接
Docker 安裝后會自動創建 3 種默認網絡,可通過 docker network ls
查看:
# 查看所有網絡
docker network ls
默認網絡包括:
bridge
:默認網絡,單機容器間通信(最常用)host
:容器直接使用主機網絡棧(無網絡隔離)none
:禁用容器網絡(完全隔離)
二、自定義網絡的創建(核心操作)
默認網絡功能有限,實際場景中通常需要創建自定義網絡。通過 docker network create
命令創建,支持多種驅動類型,常用參數如下:
參數 | 說明 |
---|---|
--driver 或 -d | 指定網絡驅動(如 bridge、overlay 等) |
--subnet | 配置子網(如 192.168.0.0/16) |
--gateway | 配置網關 IP |
--ip-range | 分配容器的 IP 范圍(如 192.168.1.0/24) |
--opt 或 -o | 驅動特定的選項(如橋接名稱) |
--name | 自定義網絡名稱 |
1. Bridge 網絡(最常用,單機容器通信)
Bridge 是默認驅動,適合同一主機內的容器通信,支持 DNS 解析(容器可通過名稱互訪)。
創建自定義 bridge 網絡:
# 基礎創建(自動分配子網)
docker network create my-bridge-net# 自定義子網、網關和 IP 范圍
docker network create \--driver bridge \--subnet 172.20.0.0/16 \ # 子網--gateway 172.20.0.1 \ # 網關--ip-range 172.20.1.0/24 \ # 容器 IP 范圍--opt "com.docker.network.bridge.name"="my-bridge" \ # 自定義橋接設備名my-custom-bridge
特點:
- 容器默認分配該網絡的 IP(可通過
--ip
指定固定 IP) - 支持容器名稱互訪(如容器
app1
可直接 pingapp2
) - 與默認 bridge 相比,安全性更高(默認隔離,需顯式連接)
2. Host 網絡(無網絡隔離)
Host 驅動讓容器直接使用主機的網絡棧(IP、端口與主機共享),性能最優但無隔離性。
創建 host 網絡(通常無需手動創建,直接使用默認 host 網絡):
# 使用默認 host 網絡運行容器(無需創建)
docker run -d --network host --name my-host-app nginx
特點:
- 容器無需端口映射(直接使用主機端口,如容器的 80 端口即主機的 80 端口)
- 適合對網絡性能要求極高的場景(如高頻通信服務)
- 安全性低(容器直接暴露在主機網絡中)
3. Overlay 網絡(跨主機容器通信)
Overlay 驅動用于跨主機的容器通信(需 Docker Swarm 集群環境),通過 VXLAN 技術實現跨主機數據傳輸。
創建步驟:
-
初始化 Swarm 集群(需至少 1 個管理節點):
docker swarm init --advertise-addr 主機IP # 管理節點初始化
-
創建 overlay 網絡:
docker network create \--driver overlay \--attachable \ # 允許非 Swarm 服務的容器連接--subnet 10.0.0.0/24 \my-overlay-net
特點:
- 跨主機容器可直接通信(無需復雜路由配置)
- 支持加密(通過
--opt encrypted
開啟數據加密) - 依賴 Swarm 集群(單主機無需使用)
4. Macvlan 網絡(容器模擬物理設備)
Macvlan 允許為容器分配物理網卡級別的 MAC 地址,讓容器像獨立物理設備一樣接入網絡(適合需要固定網絡標識的場景)。
創建 macvlan 網絡:
docker network create \--driver macvlan \--subnet 192.168.1.0/24 \--gateway 192.168.1.1 \--opt parent=eth0 \ # 綁定主機物理網卡(如 eth0)my-macvlan-net
特點:
- 容器擁有獨立 MAC 和 IP(與物理設備在同一網絡)
- 適合需要被外部網絡直接識別的場景(如網絡設備模擬)
- 需主機網卡支持(部分虛擬網卡可能不兼容)
5. None 網絡(完全禁用網絡)
None 驅動完全禁用容器網絡,適合無需網絡的離線任務(如數據處理腳本)。
使用方式(無需創建,直接使用默認 none 網絡):
docker run -d --network none --name no-network-app busybox sleep 3600
三、容器與網絡的關聯操作
1. 運行容器時連接網絡
# 連接到指定網絡(可同時連接多個網絡)
docker run -d \--name my-app \--network my-bridge-net \ # 主網絡--network-alias app1 \ # 網絡內別名(用于 DNS 解析)nginx# 為容器指定固定 IP(僅自定義網絡支持)
docker run -d \--name fixed-ip-app \--network my-bridge-net \--ip 172.20.1.10 \ # 需在網絡的 ip-range 范圍內nginx
2. 為運行中的容器添加/移除網絡
# 連接到新網絡
docker network connect my-overlay-net my-app# 從網絡斷開
docker network disconnect my-overlay-net my-app
四、網絡管理與調試
1. 查看網絡詳情
docker network inspect my-bridge-net # 查看網絡配置、關聯的容器等
2. 刪除網絡
# 先斷開所有容器連接,再刪除
docker network rm my-bridge-net
3. 測試容器間通信
# 在容器內 ping 另一容器(通過名稱或 IP)
docker exec -it my-app ping app1 # 基于網絡別名通信
五、實踐
- 優先使用自定義 bridge 網絡:相比默認 bridge,支持 DNS 名稱解析,隔離性更好。
- 跨主機用 overlay:配合 Swarm 或 Kubernetes 實現集群網絡。
- 減少 host 網絡使用:無隔離性,可能導致端口沖突。
- 固定 IP 謹慎使用:動態分配更符合容器彈性伸縮特性,固定 IP 適合特殊場景(如服務注冊)。