Docker容器“多网卡”实为多自定义网络+服务选择性接入,通过逻辑隔离通信平面实现业务流量分路径管控;按角色划分frontend、backend、internal-db等网络,配置internal: true和固定子网强化安全与策略对齐,并需实测验证跨网隔离效果。

直接配置“多网卡”在 Docker 容器中并不像物理机那样插两块网卡,而是通过多个自定义网络 + 服务选择性接入来实现等效效果。核心不是增加虚拟网卡数量,而是构建逻辑隔离的通信平面,让不同业务流量走不同路径、受不同策略控制。
按业务角色划分网络,明确访问边界
把前端、后端、数据库、监控等组件分别接入专属网络,避免越权直连。例如:
- frontend 网络:仅给 Nginx 或 React 前端容器使用,对外暴露 80/443,不连数据库
- backend 网络:API 服务同时加入 frontend 和 backend,作为唯一转发入口
- internal-db 网络:PostgreSQL 容器只接入此网络,外部容器无法 ping 通或 telnet 连接
用 Docker Compose 声明并绑定多个网络
在 docker-compose.yml 中定义网络并为服务指定接入列表:
version: '3.8'
services:
web:
image: nginx
networks: [frontend]
api:
image: my-api:latest
networks: [frontend, backend]
db:
image: postgres:15
networks: [backend, internal-db]
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal-db:
driver: bridge
internal: true # 禁止该网络访问外网,增强数据库安全
注意:一个服务可接入多个网络,但每个网络中的容器默认只能和同网络内其他容器通信;跨网络访问必须由同时接入双方网络的服务(如 api)中转。
配合 internal 和自定义子网提升控制粒度
对敏感网络启用 internal: true,并手动指定子网段,便于后续排查和防火墙策略对齐:
-
internal-db设为internal: true后,容器仍可访问宿主机,但无法主动访问互联网(如 apt update 失败),天然限制数据外泄风险 - 用
ipam.config固定子网,比如172.20.10.0/24给监控网、172.20.20.0/24给日志网,方便在 iptables 或云平台安全组中做 CIDR 级别管控
验证是否真正隔离
不要只看配置,要动手测连通性:
- 进
web容器执行ping db→ 应失败(无路由、无 DNS 解析) - 进
api容器执行ping db→ 应成功(同属 backend 和 internal-db 网络) - 在宿主机上执行
docker network inspect internal-db→ 查看是否含"Internal": true字段


















