
Docker网络是初学者最困惑的方面之一。为什么有些容器可以互相通信而其他的不行?为什么容器无法连接互联网?为什么映射的端口在主机上可以工作,但从另一个容器却不行?本指南涵盖每个Docker网络驱动程序,并提供实际示例,帮助您为每个场景选择合适的驱动程序。
Docker网络如何工作
Docker有独立于主机的网络堆栈。每个容器可以同时连接到多个网络。Docker通过网络驱动程序来管理这一点,这些驱动程序定义通信行为。
关键原则:同一网络上的容器可以使用容器名称直接通信(自动DNS)。不同网络上的容器必须使用端口映射或连接到共享网络。
Docker网络驱动程序类型
Bridge
单个主机上的虚拟专用网络。同一组中的容器可以通信。最常用。
Host
容器直接共享主机的网络堆栈。无NAT,最高吞吐量,但无隔离。
Overlay
连接多个主机上的容器。与Docker Swarm或Kubernetes配合使用。
Macvlan
容器获得LAN上的真实IP - 显示为物理机。适合传统网络集成。
Bridge 网络 — 默认模式
当您在未指定网络的情况下运行容器时,Docker 会自动使用默认的 bridge 网络。但默认 bridge 不支持容器之间的 DNS 解析。建议改用用户自定义的 bridge 网络。
用户自定义 Bridge 的优势
- 自动 DNS — 容器可通过名称相互解析(无需知道 IP)
- 隔离性 — 每个应用拥有独立的网络
- 运行时灵活性 — 可在运行时连接或断开容器
- 可控性 — 自定义子网和网关
Host 网络 — 最高性能
容器直接使用主机的网络接口,没有虚拟网络层,从而实现最低延迟和最高吞吐量。非常适合监控代理或网络密集型应用。
注意:Host 网络仅在 Linux 上有效。在 Mac/Windows(Docker Desktop)上,由于底层仍有 VM 层,性能与 bridge 相近。
Overlay 网络 — 跨多主机通信
与 Docker Swarm 或 Kubernetes 配合使用,使不同节点上的容器如同在同一网络中通信。数据通过 VXLAN 协议进行封装。
None 网络 — 完全隔离
容器没有任何网络接口(仅有 loopback)。适用于不需要网络的批处理任务,或需要最大程度隔离的场景。
Docker 网络驱动对比
| 驱动 | 适用场景 | DNS | 多主机 | 性能 |
|---|---|---|---|---|
| bridge | 默认、本地开发、单主机 | ✅(用户自定义) | ❌ | 良好 |
| host | 高性能、监控 | 主机 DNS | ❌ | 最佳 |
| overlay | Swarm、多主机 | ✅ | ✅ | 良好(VXLAN 开销) |
| macvlan | 传统网络、物理 IP | ❌ | ❌ | 非常好 |
| none | 批处理、最大隔离 | ❌ | ❌ | N/A |
Docker Compose 与网络
Docker Compose 会自动创建一个 bridge 网络。同一 Compose 文件中的所有服务默认共享该网络。
常用网络命令
故障排查:容器无法通信
- 网络不同:使用
docker network inspect确认两个容器在同一网络上 - 使用了默认 bridge:默认 bridge 没有 DNS — 迁移到用户自定义 bridge
- 主机防火墙:检查
iptables或ufw是否有拦截规则 - 端口未暴露:在 Dockerfile 中使用
EXPOSE或--expose,让其他容器可以访问该端口
保护 VPS 上的 Docker 网络
正确的网络配置是加固 Docker VPS 安全的重要环节。遵循以下安全最佳实践,最大限度地减少攻击面:
- 为数据库使用内部网络:在 Compose 中设置
internal: true,切断不需要互联网访问的容器(MySQL、Redis 等)的外网连接 - 将端口绑定限制在本地:使用
127.0.0.1:3306:3306而非3306:3306,防止数据库端口暴露到公网 - 只暴露必要端口:仅开放真正需要外部访问的端口
- 定期审计 iptables:Docker 会自动修改 iptables — 这些规则可能绕过您在操作系统层面设置的 ufw 策略
Macvlan 网络 — 集成传统系统
当容器需要在局域网中拥有真实 IP(使其看起来像独立物理机)时,Macvlan 是最佳选择。常见使用场景包括:
- 有硬编码 IP 需求的传统应用
- 需要多播或广播流量的应用
- 需要真实网络接口的网络监控工具
- 必须驻留在真实 LAN 网段的 DHCP 服务器
Macvlan 限制:由于 Linux 内核限制,主机无法直接与同一 Macvlan 网络上的容器通信。需要在主机上创建 Macvlan 子接口才能实现主机与容器之间的流量。
Docker 网络驱动选型参考
使用此快速参考表,为每种场景选择合适的网络驱动:
| 使用场景 | 驱动 | 原因 |
|---|---|---|
| Web 应用 + 数据库部署在同一台 VPS | 用户自定义 Bridge | 自动 DNS,良好的隔离性 |
| 监控代理 | Host | 需要直接访问主机网络统计数据 |
| 跨多台 VPS 节点的微服务 | Overlay | 通过 Swarm 实现透明的跨节点通信 |
| 需要真实 LAN IP 的传统系统 | Macvlan | 容器在物理网络中获得真实 IP |
使用 Docker Swarm Overlay 网络扩展规模
当单台 VPS 无法承载您的工作负载时,Docker Swarm 可让您将容器分布到多个节点上。Overlay 网络将它们透明地连接在一起,无论运行在哪台物理机上:
AsiaGB Docker 就绪型 VPS
AsiaGB VPS 开箱即用支持 Docker 和 Docker Compose,提供完整 root 权限,可按需配置网络。起价 500 泰铢/月。
查看 VPS 套餐