Docker 自定義網絡配置與管理指南
1. 網絡基礎概念
Docker 網絡是容器間通信和與外部世界交互的基礎。通過自定義網絡,可以實現容器間的隔離、靜態 IP 分配和服務發現。
關鍵術語:
- 子網(Subnet):IP 地址的邏輯分組,例如
172.18.0.0/16
包含 65,536 個 IP 地址 - 網關(Gateway):子網的默認路由,通常是子網的第一個或最后一個 IP
- CIDR 表示法:
IP/前綴長度
,如172.18.0.1/16
表示前 16 位為網絡位 - 橋接網絡(Bridge):Docker 默認的網絡驅動,用于容器間通信
2. 創建自定義網絡
創建名為 net_base
的橋接網絡,指定特定的子網和網關:
docker network create \--driver bridge \ # 使用橋接網絡驅動(默認)--subnet 172.18.0.0/16 \ # 指定 IP 地址范圍--gateway 172.18.0.254 \ # 手動指定網關 IP(子網內的最后一個可用 IP)net_base # 網絡名稱
參數說明:
--driver bridge
:創建基于 Linux 橋接的網絡--subnet
:定義網絡的 IP 地址范圍--gateway
:設置網關 IP(必須在子網范圍內)
3. 啟動容器并分配靜態 IP
在自定義網絡中啟動容器并分配靜態 IP:
docker run -d \--name mysql-8.0.39 \ # 容器名稱--network net_base \ # 連接到自定義網絡--ip 172.18.0.1 \ # 指定靜態 IP 地址(網關為 0.254,因此 0.1 可用)-p 3306:3306 \ # 端口映射-e MYSQL_ROOT_PASSWORD=XXXXXX \ # 環境變量設置-v /etc/localtime:/etc/localtime:ro \ # 時區同步-v /volume/mysql_8.0.39/data:/var/lib/mysql \ # 數據持久化mysql:8.0.39 # 鏡像名稱
注意事項:
- 靜態 IP 必須在子網范圍內且未被使用
- 網關已設置為
172.18.0.254
,因此0.1
可安全分配給容器 - 靜態 IP 需要在創建容器時指定,無法在運行時修改
4. 網絡管理常用命令
查看網絡列表:
docker network ls
查看網絡詳細信息:
docker network inspect net_base
連接現有容器到網絡:
docker network connect net_base <容器名或ID>
斷開容器與網絡的連接:
docker network disconnect net_base <容器名或ID>
刪除自定義網絡(需先斷開所有容器):
docker network rm net_base
5. 驗證網絡配置
檢查容器 IP 地址:
docker inspect -f '{{.NetworkSettings.Networks.net_base.IPAddress}}' mysql-8.0.39
從容器內部測試網絡連通性:
# 測試網關連通性
docker exec -it mysql-8.0.39 ping 172.18.0.254# 測試其他容器連通性(如果有)
docker exec -it mysql-8.0.39 ping 172.18.0.3
查看容器網絡配置:
docker exec -it mysql-8.0.39 ip addr show eth0
6. 網絡配置最佳實踐
-
為不同環境創建獨立網絡:開發、測試、生產環境使用不同網絡
-
合理規劃 IP 地址:為每個服務預留足夠的 IP 地址空間
-
避免網關 IP 沖突:手動指定網關時,確保與容器 IP 無重疊
-
使用網絡別名簡化通信:
docker run -d --name web --network net_base --network-alias www nginx
其他容器可通過
www
域名訪問該容器 -
使用 Docker Compose 管理復雜網絡:
version: '3' networks:net_base:driver: bridgeipam:config:- subnet: 172.18.0.0/16gateway: 172.18.0.254 services:mysql:image: mysql:8.0.39networks:net_base:ipv4_address: 172.18.0.1
7. 故障排查
-
容器無法訪問外網:
- 檢查網關 IP 是否正確配置
- 確認宿主機防火墻允許容器網絡流量
-
容器間無法通信:
- 檢查容器是否連接到同一網絡
- 確認 IP 地址分配無沖突
- 使用
docker network inspect
檢查網絡配置
-
靜態 IP 分配失敗:
- 確保指定的 IP 在子網范圍內
- 使用
docker network inspect
查看已分配的 IP
通過合理使用自定義網絡和靜態 IP 分配,可以構建出結構清晰、易于管理的容器網絡環境。