docker network 自定义网络配置与管理指南
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=Puyou123. \ # 环境变量设置-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 分配,可以构建出结构清晰、易于管理的容器网络环境。