Docker 网络模型
约 863 字大约 3 分钟
布欧-Lewyon
2026-05-15
首页 › Docker › 网络(在新窗口打开) › Docker 网络模型
Docker 网络类型
# 查看所有网络
docker network ls
# NETWORK ID NAME DRIVER SCOPE
# abc123def456 bridge bridge local
# def456abc123 host host local
# 123abc456def none null local| 网络模式 | 驱动 | 说明 |
|---|---|---|
| bridge(默认) | bridge | 容器通过 Docker 网桥通信,默认 NAT |
| host | host | 容器直接使用宿主机网络栈 |
| none | null | 容器无网络连接 |
| overlay | overlay | Swarm 模式下跨宿主机网络 |
Bridge 网络
# 默认 bridge 网络上的容器通过 IP 通信
docker run -d --name c1 alpine sleep 3600
docker run -d --name c2 alpine sleep 3600
# 查看 c1 的 IP
docker inspect c1 --format '{{.NetworkSettings.IPAddress}}'
# 172.17.0.2
# c2 中 ping c1(通过 IP)
docker exec c2 ping 172.17.0.2默认 bridge 网络不支持通过容器名 DNS 解析。要实现容器名通信,使用自定义 bridge 网络。
Host 网络
# 容器直接使用宿主机网络,没有独立 IP
docker run -d --network host nginx:alpine
# 无需 -p 端口映射,容器直接监听宿主机端口适用场景:
- 性能敏感的应用程序(减少 NAT 开销)。
- 需要监听大量端口的服务(如 DNS 服务器)。
- 不适用:多个相同端口的容器不能同时使用 host 网络。
None 网络
# 容器无网络
docker run -d --network none alpine sleep 3600
docker exec -it $(docker ps -ql) ip addr
# 只有 lo(回环接口)适用场景:完全隔离的安全容器、仅需要本地 UNIX socket 通信。
端口映射
# -p 语法
docker run -d -p 8080:80 nginx # 宿主机 8080 → 容器 80
docker run -d -p 127.0.0.1:8080:80 nginx # 只监听本地回环
docker run -d -p 8080:80/udp nginx # UDP 端口
docker run -d -p 8080:80 -p 443:443 nginx # 多端口
# 动态端口(宿主机随机分配端口)
docker run -d -p 80 nginx
docker port $(docker ps -ql)
# 80/tcp -> 0.0.0.0:32768自定义 Bridge 网络(推荐)
自定义 bridge 网络提供内置 DNS 解析,容器之间可以通过容器名通信。
# 创建自定义网络
docker network create mynet
# 启动容器到该网络
docker run -d --network mynet --name web nginx:alpine
docker run -d --network mynet --name app node:20-alpine sleep 3600
# 通过容器名通信
docker exec app ping web
# PING web (172.18.0.2): 56 data bytes
# 查看网络详情
docker network inspect mynet自定义网络的优势:
- 自动 DNS 解析(容器名 → IP)。
- 网络隔离(不同网络间的容器无法通信)。
- 可以动态连接/断开容器与网络。
容器连接/断开网络
# 让容器同时连接到多个网络
docker network connect mynet web
docker network connect frontend web
# 断开网络
docker network disconnect mynet web网络调试
# 查看容器网络配置
docker inspect web --format '{{json .NetworkSettings}}' | jq .
# 在容器内测试网络
docker exec -it web ping google.com
docker exec -it web curl -s http://localhost
# 查看网络上的所有容器
docker network inspect mynet --format '{{range .Containers}}{{.Name}} {{end}}'小结
- Docker 默认网络模式:bridge(NAT 模式)、host(共享宿主机网络栈)、none(无网络)。
- 默认 bridge 网络容器间通过 IP 通信;自定义 bridge 网络支持通过容器名 DNS 解析,是推荐的容器互联方式。
-p 宿主机端口:容器端口做端口映射;host 模式不需要映射。docker network connect/disconnect动态管理容器网络连接。
