推荐使用自定义桥接网络,因其支持容器名解析、网络隔离和静态IP分配;默认bridge仅适用于单容器快速测试,存在IP易变、无法DNS解析等限制。

Docker 桥接网络配置分两种典型场景:用默认 bridge(即 docker0)和创建自定义桥接网络。后者才是生产推荐方式,能解决容器名解析、隔离性、静态 IP 等关键问题。下面直接说清楚怎么写、怎么用。
默认桥接网络(简单但有限制)
不加任何网络参数时,Docker 自动使用 docker0 网桥:
docker run -d --name web1 nginx docker run -d --name web2 nginx
- 容器自动获得
172.17.0.0/16子网内的 IP(如172.17.0.2、172.17.0.3) - 容器间只能靠 IP 通信(比如
ping 172.17.0.3),重启后 IP 可能变 - 宿主机可通过
localhost:端口访问容器服务,需显式-p映射:
docker run -d -p 8080:80 --name web3 nginx
✅ 适合快速测试;❌ 不适合多容器协作或稳定服务发现。
自定义桥接网络(推荐写法)
这才是真正可维护的配置方式,支持容器名互通、子网可控、静态 IP 等:
1. 创建网络(指定子网和网关可选)
docker network create \ --driver bridge \ --subnet 192.168.100.0/24 \ --gateway 192.168.100.1 \ myapp-net
-
--driver bridge明确指定桥接模式(可省略,默认就是) -
--subnet和--gateway让网络更可控,避免与宿主机或其他网络冲突 - 网络名
myapp-net会生成一个独立网桥(如br-xxxxx),和docker0互不干扰
2. 启动容器并加入该网络
docker run -d --name db --network myapp-net -e MYSQL_ROOT_PASSWORD=123 mysql:8 docker run -d --name api --network myapp-net --env DB_HOST=db my-api-image
- 容器启动即自动获得该子网内 IP(如
192.168.100.2) -
api容器可直接用ping db或curl http://db:3306连接 —— 无需 IP,DNS 自动解析
3. 需要固定 IP?这样写
docker run -d \ --name cache \ --network myapp-net \ --ip 192.168.100.10 \ redis:7
⚠️ 注意:--ip 只在用户自定义 bridge 网络中生效,不能用于默认 bridge。
查看和验证配置
# 列出所有网络 docker network ls # 查看某网络详情(含已连接容器、IP 分配情况) docker network inspect myapp-net # 进入容器验证连通性 docker exec -it api ping db docker exec -it api nslookup db # 确认 DNS 解析正常
小贴士:什么时候该用哪种?
- 临时调试单个容器 → 默认
bridge+-p映射就够了 - 多容器协同(如 app + db + cache)→ 必须用自定义 bridge 网络
- 要求容器地址不变(如配置文件写死)→ 自定义网络 +
--ip - 需要跨主机通信 → 那就得换
overlay或macvlan,不是 bridge 范畴了
不复杂但容易忽略


















