生产环境 Docker 网络需用自定义 bridge 替代默认 docker0,配置子网、网关与 DNS;跨主机必须用 overlay(Swarm/K8s);对外暴露须限端口、禁 0.0.0.0 绑定,前置反向代理;后端服务禁宿主机映射,仅内网通信;安全加固需禁 NAT、降权、配防火墙。

生产环境的 Docker 网络配置不能只靠默认 bridge,得兼顾隔离性、可发现性、跨主机通信能力与安全可控性。核心是选对驱动、建好自定义网络、配准通信规则,而不是直接暴露或共享宿主机网络。
用自定义 bridge 网络替代默认 docker0
默认 docker0 网桥不支持容器名自动解析、子网固定难、iptables 规则杂乱,不适合生产。
- 创建带子网、网关和 DNS 支持的桥接网络:
docker network create --driver bridge <br> --subnet 192.168.50.0/24 <br> --gateway 192.168.50.1 <br> --opt com.docker.network.bridge.name=prod-bridge <br> prod-network
- 启动容器时显式指定该网络:
docker run -d --name api --network prod-network -p 8080:8080 my-api:prod - 同一网络下的容器可直接用容器名通信(如
curl http://api:8080/health),无需 IP 或端口映射
跨主机服务必须用 overlay 网络(Swarm 或 Kubernetes)
单机 bridge 无法打通多台物理机或云服务器上的容器。生产集群必须启用 overlay 驱动。
- 初始化 Swarm 模式(至少一台 manager):
docker swarm init --advertise-addr 10.0.1.10 - 创建 overlay 网络(自动跨节点):
docker network create -d overlay --attachable prod-overlay - 部署服务并接入该网络:
docker service create --network prod-overlay --name web nginx:alpine - 所有加入 Swarm 的节点上,容器都能通过嵌入式 DNS 按服务名互通
对外暴露服务要严格控制端口与协议
避免全量 -p 80:80 映射,尤其在公网宿主机上。
- 只映射必要端口,禁用默认绑定到
0.0.0.0:docker run -p 127.0.0.1:8080:8080 ...(仅本机可访问) - 生产 Web 服务建议前置反向代理(Nginx / Traefik),容器内部只监听
localhost:8080,由代理统一处理 TLS、限流、WAF - 数据库等后端服务禁止映射到宿主机端口,应仅通过 overlay 或自定义 bridge 内部通信
安全加固:禁用非必要网络能力
减少攻击面,从网络层开始约束容器行为。
- 对无外网需求的服务,禁用 NAT 和外联能力:
docker run --network prod-network --sysctl net.ipv4.ip_forward=0 ... - 敏感服务使用
--read-only+--tmpfs /run防止写入磁盘 - 限制容器可调用的内核能力:
--cap-drop=ALL --cap-add=NET_BIND_SERVICE(仅允许绑定端口) - 配合
iptables或主机防火墙(如ufw)限制宿主机入向端口,例如只放行 22、80、443、Swarm 端口(2377、7946、4789)
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/31945.html