容器网络互通隔离双重安全配置:容器网络互通与隔离双重安全配置

容器网络互通与隔离双重安全配置:Docker 实战指南

在多容器部署环境中,既要让部分容器能互相通信(如前端连接后端),又要防止恶意容器或未授权服务对整个集群造成影响。
本文用 Docker 为例,带你从头配置容器网络互通与隔离双重安全方案,即使完全零基础也能跟着步骤完成。

准备条件

  • 一台已安装 Docker 的 Linux 服务器(CentOS 7+ 或 Ubuntu 18.04+ 均可)
  • 拥有 root 或者 sudo 权限
  • 如果你使用宝塔面板,同样可在“软件商店”安装 Docker 管理器
检查 Docker 是否运行:systemctl status docker,若未运行则执行 systemctl start docker

第一步:创建自定义网络

默认的 bridge 网络会让所有容器自动互通(无隔离)。
我们需要创建两个不同的自定义网络,分别用于“可信任业务”和“外部交互”。

docker network create --driver bridge trusted_net
docker network create --driver bridge isolated_net
  • trusted_net:用于内部服务(如数据库、应用核心)之间的安全通信。
  • isolated_net:用于需要对外暴露的服务(如 Nginx,但只允许特定端口)。

第二步:将容器分配到不同网络

启动容器时指定网络,实现物理隔离。

启动一个数据库容器(仅接入 trusted_net)

docker run -d --name mysql-db --network trusted_net -e MYSQL_ROOT_PASSWORD=mysecret mysql:8.0

启动一个应用容器(同时接入两个网络)

docker run -d --name app-backend --network trusted_net nginx:alpine
docker network connect isolated_net app-backend

这样 app-backend 能通过 trusted_net 访问数据库,又能通过 isolated_net 接受外部流量。

启动一个对外 Nginx 容器(仅接入 isolated_net)

docker run -d --name nginx-gateway --network isolated_net -p 80:80 nginx:alpine

第三步:验证网络互通与隔离

进入一个容器测试连通性(以下命令在 host 上执行):

# 验证 trusted_net 内互通:从 app-backend ping mysql-db
docker exec app-backend ping mysql-db
# 应能收到回复

# 验证隔离效果:从 nginx-gateway ping mysql-db(属于不同网络)
docker exec nginx-gateway ping mysql-db
# 应提示无法连接或 timeout

这说明跨网络通信被自动阻止,实现了基本隔离。

第四步:进一步强化安全——禁止容器间默认互通(隔离模式)

默认同一个自定义网络下的容器之间可以通信。
如果希望同一网络内也禁止互相访问(比如严格隔离),可以在创建网络时指定 --internal 或使用 docker network create --opt com.docker.network.bridge.enable_icc=false

注意:此选项会阻止同一网络下所有容器间的通信,必须通过额外设置才能开放特定连接。
生产环境下慎用,一般用于高安全场景。

示例:

docker network create --driver bridge --opt com.docker.network.bridge.enable_icc=false secure_net
docker run -d --name container1 --network secure_net alpine sleep 3600
docker run -d --name container2 --network secure_net alpine sleep 3600
# container1 无法 ping 通 container2

避坑指南

  1. 网络名称冲突:创建新网络时请避免使用 bridgehostnone 等保留名。
  2. 端口映射与网络隔离不冲突:即使容器只接入 internal 网络,通过 -p 暴露的端口仍能在外访问,注意防火墙配合。
  3. 容器重启后网络不会丢失:容器停止再启动,网络连接关系保留。如需要断开网络,使用 docker network disconnect
  4. 不要在一台主机上同时使用默认 bridge 和自定义网络:自定义网络更灵活且支持 DNS 解析,建议全用自定义网络。

效果验证

  • 执行上面第六步的 ping 测试,确保预期通信正常、非预期通信失败。
  • 使用 docker network inspect trusted_net 可看到所有接入的容器 IP。
  • 使用 docker inspect app-backend | grep NetworkMode 查看网络模式,应为多个网络。

常见问题

Q:为什么同一自定义网络下的容器不能互相访问?
A:检查是否启用了 icc=false,或者容器所在网络不同。另外 Docker 默认启用 DNS 解析,但需要容器内安装 ping 命令(Alpine 可执行 apk add iputils)。

Q:如何让某个容器只能被特定容器访问?
A:可以创建独立的网络,只将需要通信的容器加入该网络;或者使用 Docker Compose 的 depends_on + 自定义网络组合,但更推荐手动规划网络粒度。

总结

通过创建多个自定义网络,并按需分配容器,你可以在零成本下实现容器网络互通与隔离双重安全配置
同样,如果你使用 Kubernetes,可参考其 NetworkPolicy 实现更细粒度控制。
如果你正在搭建生产环境,建议先按本文步骤完整验证,再根据业务调整网络划分。

遇到异常时,重点检查网络名称、容器是否处于同一网络、以及 icc 参数是否被误关闭。

分享到:
上一篇
离线部署大模型依赖无网络住宅主机
下一篇
挖矿进程手动查杀清理服务器后门:服务器被植入挖矿进程?手把手
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意