Linux · 2 分钟阅读
14. 使用网络
网络驱动
| 驱动 | 用途 |
|---|---|
bridge |
默认,单机容器互联 |
host |
容器共享主机网络栈 |
none |
无网络 |
overlay |
跨主机(Swarm 模式) |
macvlan |
容器有独立 MAC,直连物理网 |
ipvlan |
类似 macvlan,共享 MAC |
2026 年单主机开发基本只剩
bridge+host;多主机已普遍交给 K8s / Cilium / Calico。
端口映射
# 随机映射到 49000-49900
docker run -d -P training/webapp python app.py
# 指定映射
docker run -d -p 5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看:
docker ps
docker port <id> 5000
自定义网络(容器互联)
# 创建
docker network create my-net
# 启动并加入
docker run -d --name app1 --network my-net myapp
docker run -d --name app2 --network my-net myapp
# 互 ping
docker exec app1 ping app2
同一自定义网络下,容器名就是 hostname。这是 bridge 默认网络做不到的。
别名
docker run -d --network my-net --network-alias db postgres:16
DNS
// /etc/docker/daemon.json
{
"dns": ["114.114.114.114", "8.8.8.8"]
}
运行时覆盖:
docker run -it --rm --dns=8.8.8.8 --dns-search=example.com centos:7
docker run -it --rm --hostname=my-host centos:7
host 模式
docker run -d --network host nginx:1.27
- 容器直接使用主机网络,没有网络隔离
- 性能好,但端口会冲突
- 适合监控、网络工具、单机压测
一些经验
- 自定义网络优先:服务发现、隔离、DNS 都能用
- bridge 默认网络别用于多服务互联——DNS 不工作
- 跨主机用 overlay / K8s,别自己拼
- 性能敏感场景用 host,但要承担端口管理成本