文章目录一、为什么镜像启动后还要“网络”二、默认三大模式速览三、桥接模式bridge四、主机模式host五、none 网络想象一下你有一个包含 Web 服务器、数据库和缓存的微服务应用。这些容器需要相互通信同时也需要被外部访问。Docker 网络系统就是为了解决这些通信问题而设计的。没有网络容器就像孤岛一样无法协作。一、为什么镜像启动后还要“网络”容器本质是隔离的进程网络栈网卡、路由、iptables、DNS也被隔离。Docker网络负责让容器彼此通信同一主机、跨主机让容器与外部通信互联网、宿主机提供DNS 发现容器名即域名支持热插拔运行时加端口、换网段二、默认三大模式速览维度bridge默认hostnone独立 IP✅ 有❌ 无宿主机❌ 无端口映射需要-p不需要无意义性能普通NAT极高零转发无网络安全隔离默认网络隔离与宿主机共享完全隔离平台支持全平台仅 Linux 真机全平台典型用途一般业务高并发、端口爆炸离线、密钥、安全沙箱一键体验dockerrun--rm--networkbridge nginx# 默认dockerrun--rm--networkhostnginx# 共享宿主机网络dockerrun--rm--networknoneipaddr# 空网络三、桥接模式bridgeDocker网络 默认Bridge桥接模式所有的容器都连接到这个网络中每一个容器都分配了一个内部的 IP 地址一般都是172.17开头。在这个内部子网里面容器可以通过内部 IP 地址互相访问。┌────────────┐ ┌────────────┐ │ Container A │ │ Container B │ │ eth0docker0 │────────────▶│ eth0docker0 │ └────────────┘ └────────────┘ ▲ ▲ │veth │veth └──────── Docker0 (172.17.0.1/16) ─────────┘docker0是 Linux 虚拟网桥内核自动生成每启动一个容器Docker 创建一对veth设备一端在容器一端插到 docker0容器获得172.17.x.x地址同一网段互通出网流量经宿主机iptables MASQUERADE规则转发# 创建一个 名叫 network1 的子网dockernetwork create network1# 创建一个 nginx 容器 使用 network1 的子网dockerrun-d--networknetwork1 nginx四、主机模式hosthost 模式下docker 容器直接共享宿主机的网络容器直接使用宿主机的 IP 地址无需 -p 参数进行端口映射容器内的服务直接运行在宿主机的端口上通过宿主机的 IP 和端口就能访问到容器中服务。容器放弃独立网络栈直接蹭宿主机网特点说明无隔离容器进程看到的eth0 / 127.0.0.1 / 端口空间 宿主机本身无端口映射-p 8080:80变成多余容器里监听:80就是宿主机:80性能极高省去 veth iptables 转发吞吐量接近裸机延迟低 10-20 µs安全风险容器可嗅探宿主机全部流量能绑定 0.0.0.0 抢占端口平台差异Windows / Mac 不可用Docker Desktop 基于 VMhost 指 VM 而非物理机一键体验dockerrun--rm--networkhostnicolaka/netshoot# 在容器里ipaddr# 就是宿主机的网卡列表netstat-tunlp# 能看到宿主机所有监听端口适用场景高并发网关、日志采集、Prometheus NodeExporter 等“对性能极度敏感”服务需要绑定大量随机端口ActiveMQ、FTP时避免映射爆炸仅限 Linux 生产节点且受信任镜像。五、none 网络容器被拔网线这个模式表示不联网特点说明零网络容器内只有lo回环接口无 IP、无路由、无 DNS攻击面最小即使应用被 RCE也无法外联、无法横向移动日志 / sidecar 通过卷或 stdout 输出常与docker logs或文件卷配合体积最小镜像构建阶段无网络依赖时可确保“离线纯净”一键体验dockerrun--rm--networknone alpinesh-cip addr; ping 8.8.8.8# 只能看到 loping 提示 Network unreachable适用场景离线加密运算、签名机、密钥管理——“绝不让数据出容器”调试网络无关代码纯算法、正则测试CI 安全阶段确保构建过程不偷偷下载依赖。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目