Docker 网络管理速查表 — Bridge、Host、Overlay 和端口映射
Docker 网络将容器之间以及容器与外部世界连接起来。本指南覆盖所有网络驱动、端口暴露、容器互联和自定义网络管理。
快速参考
| 场景 | 命令 |
| 列出网络 | docker network ls |
| 查看网络详情 | docker network inspect bridge |
| 创建自定义 bridge 网络 | docker network create my-net |
| 将容器连接到网络 | docker network connect my-net my-container |
| 断开容器与网络连接 | docker network disconnect my-net my-container |
| 删除网络 | docker network rm my-net |
| 运行容器并映射端口 | docker run -p 8080:80 nginx |
| 在指定网络上运行容器 | docker run --network my-net nginx |
| 清理未使用的网络 | docker network prune |
网络驱动对比
| 驱动 | 隔离性 | 范围 | 适用场景 |
| bridge | ✅ 按网络隔离 | 单机 | 默认。同主机容器间通信 |
| host | ❌ 无隔离 | 单机 | 最大性能,无 NAT(如监控工具) |
| overlay | ✅ 按网络隔离 | 多机 | Swarm 服务、跨主机通信 |
| none | 完全隔离 | 单机 | 无网络(仅 loopback) |
| macvlan | 按容器 | 单机 | 分配 MAC 地址,模拟物理设备 |
核心命令详解
### 管理网络
``bash
# 列出所有网络
docker network ls
# 创建自定义 bridge 网络 docker network create --driver bridge my-app-network
# 创建指定子网的网络 docker network create --subnet 172.20.0.0/16 my-custom-net
# 查看网络详情 docker network inspect my-app-network
# 删除网络 docker network rm my-app-network
# 清理未使用的网络
docker network prune
`
### 容器互联
`bash
# 在指定网络上运行容器
docker run -d --name api --network my-app-network my-api:latest
# 将已有容器连接到网络 docker network connect my-app-network my-database
# 断开连接 docker network disconnect my-app-network old-container
# 验证连通性(自定义网络上容器名自动 DNS 解析)
docker exec api ping my-database
`
### 端口映射
`bash
# 宿主机 8080 → 容器 80
docker run -p 8080:80 nginx
# 多端口映射 docker run -p 8080:80 -p 443:443 nginx
# 绑定到指定 IP docker run -p 127.0.0.1:8080:80 nginx
# 随机端口(由 Docker 分配) docker run -P nginx
# UDP 端口映射 docker run -p 53:53/udp dns-server ``
网络管理(26)
| 命令 | 难度 | ||
|---|---|---|---|
docker network create创建一个新的网络 | 基础 | docker network create my-network | |
docker network ls列出所有网络 | 基础 | docker network ls | |
docker network inspect查看网络详细信息 | 基础 | docker network inspect my-network | |
docker network connect将容器连接到网络 | 中级 | docker network connect my-network my-container | |
docker network disconnect将容器从网络断开 | 中级 | docker network disconnect my-network my-container | |
docker network rm删除一个或多个网络 | 基础 | docker network rm my-network | |
docker network prune删除未使用的网络 | 高级 | docker network prune | |
docker network --help显示 docker network 帮助信息 | 基础 | docker network --help | |
docker network ls -q仅显示网络 ID | 基础 | docker network ls -q | |
docker network ls --filter按条件过滤列出网络 | 中级 | docker network ls --filter driver=bridge | |
docker network create --driver使用指定驱动创建网络 | 中级 | docker network create --driver bridge my-bridge | |
docker network create --driver overlay创建 overlay 网络驱动(Swarm 模式) | 高级 | docker network create --driver overlay my-overlay | |
docker network create --subnet创建网络并指定子网 | 中级 | docker network create --subnet 172.20.0.0/16 my-network | |
docker network create --gateway --ip-range创建网络时指定网关和 IP 范围 | 高级 | docker network create --subnet 172.20.0.0/16 --gateway 172.20.0.1 --ip-range 172.20.10.0/24 my-network | |
docker network create --internal创建内部网络(禁止外部访问) | 中级 | docker network create --internal my-internal | |
docker network create --attachable创建可附加的 overlay 网络 | 高级 | docker network create --driver overlay --attachable my-attachable | |
docker network create --ipv6创建启用 IPv6 的网络 | 高级 | docker network create --ipv6 --subnet 2001:db8::/64 my-ipv6-net | |
docker network create --label创建网络并添加元数据标签 | 中级 | docker network create --label env=prod --label team=backend my-network | |
docker network create -o创建网络并设置驱动选项 | 高级 | docker network create -o com.docker.network.bridge.enable_icc=false my-secure-bridge | |
docker network connect --ip连接容器并指定 IP 地址 | 中级 | docker network connect --ip 172.20.0.10 my-network my-container | |
docker network connect --alias连接容器并设置网络别名 | 中级 | docker network connect --alias db my-network my-container | |
docker network inspect --verbose查看网络详细配置(含任务和容器) | 中级 | docker network inspect --verbose my-network | |
docker network inspect --format自定义查看网络信息格式 | 高级 | docker network inspect --format '{{.Name}} {{.Driver}}' my-network | |
docker network disconnect --force强制断开容器与网络的连接 | 中级 | docker network disconnect --force my-network my-container | |
docker network prune -f强制删除所有未使用的网络(无需确认) | 基础 | docker network prune -f | |
docker network prune --filter按条件删除未使用的网络 | 高级 | docker network prune --filter "until=24h" |