生产环境通常首选自定义 Bridge 模式兼顾隔离与灵活,高性能或特殊监控场景才考虑 Host 模式,完全隔离需求选 None 模式。
先说结论:生产环境推荐使用自定义 Bridge 网络,追求极致性能或需绑定宿主机端口时用 Host,无需联网的批处理任务用 None。
- 适合:自定义 Bridge 适合大多数微服务通信,Host 适合低延迟网络服务,None 适合安全隔离任务
- 重点看:安全需求 None 最高,性能需求 Host 最高,运维复杂度 Host 最高(需管理端口冲突)
- 别忽略:默认 Bridge 不支持容器名 DNS 解析,Host 模式存在容器逃逸风险
核心模式区别与生产建议
Bridge 模式是 Docker 默认网络,容器通过虚拟网桥 docker0 连接。注意:默认 Bridge 不支持容器名 DNS 解析,生产环境多容器协作应使用自定义 Bridge 网络。Host 模式容器共享宿主机网络栈,直接使用宿主机 IP 和端口,绕过网络隔离。None 模式仅创建 loopback 接口,彻底阻断内外通信。
实操命令与配置
以下是常用网络模式的启动命令及自定义网络创建方法:
# 默认 Bridge 模式(不推荐生产多容器协作)
docker run -d `--name` web nginx
# 自定义 Bridge 模式(推荐生产环境)
docker network create -d bridge my-net
docker run -d `--network` my-net `--name` web nginx
# 指定 Host 模式
docker run -d `--network` host nginx
# 指定 None 模式
docker run -d `--network` none alpine对于 None 模式容器,若后续需要联网,可通过以下命令连接到现有网络:
docker network connect my-net <container_id>验证与排查
使用 docker inspect 查看 NetworkMode 字段,进入容器内部使用 ip addr 检查网卡和 IP 分配情况。Host 模式下应看到宿主机网卡,None 模式下仅见 lo 接口。
连通性验证命令:
# 查看容器网络模式
docker inspect -f '{{.HostConfig.NetworkMode}}' <container_id>
# 容器内 Ping 测试
docker exec -it <container_id> ping -c 4 www.baidu.com
# 宿主机测试容器端口连通性
nc -zv <container_ip> <port>docker inspect 网络字段示例:
"NetworkMode": "bridge",
"Networks": {
"bridge": {
"IPAddress": "172.17.0.2"
}
}安全风险与注意事项
- Host 模式风险:容器共享宿主机网络命名空间,若容器内进程监听 0.0.0.0,会直接占用宿主机端口。若容器被攻破,攻击者可直接扫描宿主机内网,存在容器逃逸及宿主机安全风险,建议配合安全组策略限制访问。
- Bridge 模式限制:默认 Bridge 模式下容器间无法通过容器名互访,需通过 IP 或自定义网络。NAT 转发会带来轻微性能开销。
- None 模式运维:None 模式启动配置简单,但后续网络连通需手动处理,运维复杂度较高。适用于完全不需要外网访问的高安全级别任务。
- 端口冲突:Host 模式下容器端口与宿主机端口冲突会导致启动失败,启动前需检查宿主机端口占用情况。
参考文档
- Docker Official Documentation: Networking
- Docker CLI: docker network