Docker 网络
网络驱动
| 驱动 | 使用场景 | 说明 |
|---|---|---|
| bridge | 独立容器默认驱动 | 单主机隔离网络 |
| host | 性能敏感型应用 | 共享主机网络栈,无隔离 |
| overlay | Swarm 多主机 | 加密节点间流量 |
| none | 完全隔离容器 | 仅有回环接口 |
网络管理
# 列出网络
docker network ls
# 创建自定义 bridge 网络
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
my-network
# 检查网络
docker network inspect my-network
# 连接/断开运行中的容器
docker network connect my-network my-container
docker network disconnect my-network my-container
# 删除网络
docker network rm my-network
docker network prune # 删除所有未使用
端口绑定
# 发布指定端口
docker run -p 8080:80 nginx
# 绑定到指定主机 IP
docker run -p 127.0.0.1:8080:80 nginx
# 随机分配主机端口
docker run -P nginx
# 多端口
docker run -p 80:80 -p 443:443 my-server
# 查看端口映射
docker port my-container
DNS 与容器发现
# 同一用户自定义网络上的容器可通过名称互相解析
docker network create app-net
docker run -d --name db --network app-net postgres:16
docker run -d --name api --network app-net myapp
# api 可通过主机名 "db" 访问数据库
# 自定义 DNS
docker run --dns=8.8.8.8 --hostname=my-host nginx
# 注意:默认 bridge 网络不支持 DNS,
# 请始终使用用户自定义网络进行服务发现
Docker Compose 网络
services:
web:
image: nginx
ports: ["80:80"]
networks: [frontend, backend]
api:
image: myapi
networks: [backend]
db:
image: postgres:16
networks: [backend]
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # 禁止此网络访问互联网