R / Richie全部文章 ↑

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,但要承担端口管理成本

参考