1. 容器网络身份
Docker 先给容器一个 network namespace。
容器只看到自己的 eth0、IP、路由、DNS 和网关。
背后通常是 veth 接到宿主机 bridge。
2. bridge / NAT
默认 bridge 或 user-defined bridge 负责单机容器互联。
容器出站通常经 MASQUERADE / SNAT,外部看到宿主机 IP。
自定义 bridge 比默认 bridge 更适合项目隔离和 DNS。
3. 端口发布
EXPOSE 只是镜像元数据。
-p 8080:80 才把 HostIP:8080 转到 ContainerIP:80。
应用还必须监听 0.0.0.0,而不是只监听 127.0.0.1。
4. DNS / Compose
User-defined network 里可以按容器名 / alias 解析。
Compose 默认创建项目网络,service name 是稳定入口。
容器间访问用 service name + container port,不用宿主机 published port。
5. 网络驱动选择
bridge:单机默认。 host:共享宿主网络。 none:只有 loopback。 overlay:Swarm / 多 Docker host。 macvlan / ipvlan:接入物理网络。
6. 防火墙 / 数据面
Docker 会写 iptables / nftables 规则。
端口发布、bridge 隔离、NAT 出站都依赖这些规则。
UFW / firewalld 看到的结果可能和直觉不同,排障要看 Docker 自己的链。
7. 和 Kubernetes 接上
Docker 解释单机容器如何接入 Linux 网络。
Kubernetes 在此之上增加 Pod、CNI、Service、EndpointSlice、kube-proxy/eBPF、Ingress/Gateway 和 NetworkPolicy。
-p 不等于 Service;host network 不等于生产入口。
8. 排障路径
容器内:ip addr / ip route / resolv.conf / getent hosts。
Docker 层:network inspect / ps ports。
宿主机:ss / iptables-save / nft / conntrack。
先分清:出站、入站、容器间通信。