Docker 网络模式
Docker 提供了多种网络模式,满足不同的网络需求。
网络驱动
bridge(默认)
bridge 是默认网络模式,适用于单机环境。
特点:
- 容器通过虚拟网桥通信
- 容器间可以相互通信
- 需要端口映射才能从主机访问
sh
# 创建 bridge 网络
docker network create my-bridge
# 运行容器并连接到网络
docker run -d --network my-bridge --name app1 nginx
docker run -d --network my-bridge --name app2 nginxhost
host 模式直接使用主机网络。
特点:
- 容器直接使用主机网络栈
- 性能最好
- 端口不需要映射
- 仅 Linux 支持
sh
docker run -d --network host nginxoverlay
overlay 网络用于 Docker Swarm 集群。
特点:
- 跨主机容器通信
- 自动服务发现
- 加密通信
macvlan
macvlan 允许容器直接使用物理网络。
特点:
- 容器获得独立 MAC 地址
- 直接访问物理网络
- 需要物理网络支持
none
none 模式禁用网络。
sh
docker run -d --network none alpine端口映射
将容器端口映射到主机端口:
sh
# 映射单个端口
docker run -d -p 8080:80 nginx
# 映射多个端口
docker run -d -p 8080:80 -p 8443:443 nginx
# 指定主机 IP
docker run -d -p 127.0.0.1:8080:80 nginx网络配置
查看网络
sh
# 列出所有网络
docker network ls
# 查看网络详情
docker network inspect bridge连接容器到网络
sh
# 运行容器时连接
docker run -d --network my-network nginx
# 连接已运行的容器
docker network connect my-network container-name断开容器网络
sh
docker network disconnect my-network container-nameDocker Compose 网络
yaml
version: '3.8'
services:
web:
image: nginx
networks:
- frontend
api:
image: node:18
networks:
- frontend
- backend
db:
image: postgres:15
networks:
- backend
networks:
frontend:
backend:DNS 解析
Docker 内置 DNS 服务器,容器可以通过服务名相互访问。
yaml
services:
web:
image: nginx
api:
image: node:18
# web 容器可以通过 "api" 主机名访问 api 容器