docker网络隔离核心是精准控制通信,而非简单联网;默认bridge模式容器互通风险高,须用自定义bridge网络(如db-isolated-net)物理隔离敏感服务,禁用直接跨网访问,辅以iptables监控阻断异常连接。

直接用 Docker 网络隔离保护高价值数据,核心不是“让容器联网”,而是“精准控制谁和谁能连、怎么连、连什么”。默认 bridge 网络下所有容器互通,等于把数据库、API 服务、后台管理全放在同一间没锁门的办公室里——数据泄露风险就在横向移动这一步。
为敏感服务单独划出“网络禁区”
别让数据库、认证中心、密钥管理服务混在默认网络里。必须用自定义 bridge 网络物理隔开:
- 创建专用网络:
docker network create --driver bridge db-isolated-net - 只让数据库容器加入:
docker run -d --name pg-prod --network db-isolated-net -e POSTGRES_PASSWORD=xxx postgres:15 - 应用容器不加这个网络,就根本看不见 pg-prod 这个名字,也 ping 不通它的 IP
应用与数据库之间只开“单向窄门”
即使同属一个自定义网络,也要限制通信方向和端口:
- 启动应用时显式指定网络:
docker run -d --name api-service --network app-net nginx - 若需访问数据库,用
--link(已弃用)或更推荐:在app-net中启动一个反向代理容器(如 Envoy),仅开放/health和/api/v1/users路由,后端真实地址指向db-isolated-net中的 PostgreSQL - 禁止应用容器直接暴露数据库端口(如 5432),也不挂载
--network=db-isolated-net
彻底切断非必要网络路径
对处理密钥、证书、审计日志的容器,网络越少越安全:
- 用
--network none启动离线签名服务:docker run --network none -v /keys:/mnt/keys:ro signer:latest sign payload.bin - 若必须上报结果,改用宿主机本地 socket 或文件卷输出,而非 HTTP 回调
- 配合
--read-only和--cap-drop=ALL --cap-add=chown,从网络、文件、权限三侧封死攻击面
监控并阻断异常跨网行为
隔离不是一劳永逸,要持续验证是否被绕过:
- 定期检查容器网络归属:
docker inspect container-name | jq '.NetworkSettings.Networks',确认关键容器没意外连上 public 网络 - 用
iptables -L FORWARD -n查看是否有允许跨网段转发的规则(如172.18.0.0/16 → 172.19.0.0/16) - 发现异常连接时,立即插入 DROP 规则:
iptables -I FORWARD -s 172.18.0.5 -d 172.19.0.3 -j DROP











