Docker 网络如果没想清楚,很多人就会把它理解成:
- “端口映射”
- “能访问就行”
- “反正都 localhost”
这不够。
Docker 官方文档把网络分成两层心智:
- 容器之间怎么互联
- 外部世界怎么进入容器
#1. 默认网络驱动:bridge
Docker 官方文档说明:
- 如果你不指定驱动,常见默认是
bridge - 同一宿主机上的容器通信,最常见就是桥接网络
#2. 用户自定义 bridge 很重要
官方文档明确强调:
用户自定义 bridge 网络 更适合多个容器在同一宿主机协作。
docker network create app-net
docker run -d --name db --network app-net postgres:17
docker run -d --name api --network app-net my-api:1.0.0这时候 api 容器通常就可以通过服务名或容器名去访问 db。
#3. 端口发布是对外开放,不是容器间通信
docker run -d -p 8080:80 nginx这表示:
- 外部访问宿主机
8080 - 会转发到容器
80
但容器和容器之间如果在同一网络上,本来就可以互相通信,不一定需要 -p。
#4. 网络驱动的直觉
Docker 官方文档列出常见驱动:
bridgehostoverlaymacvlanipvlan
对大多数单机项目,你先记三层就够:
bridge → 单机多容器协作默认主力
host → 直接共用宿主机网络,隔离更弱
overlay → 多主机 / Swarm 跨节点网络