linux中docker bridge网络配置核心是优先使用自定义bridge网络:docker network create --subnet=10.10.20.0/24 --gateway=10.10.20.1 mybridge,支持dns自动解析、容器名通信及子网隔离;默认docker0仅作基础备用,存在ip冲突与dns限制。

Linux 中 Docker 容器的 Bridge 网络配置,核心是用好默认桥接或主动创建自定义网络——前者开箱即用,后者更可控、更可靠。
确认并检查默认 docker0 网桥
Docker 启动后会自动创建 docker0 虚拟网桥,默认分配 172.17.0.0/16 子网,容器网关通常是 172.17.0.1。验证是否正常运行:
-
ip link show docker0—— 看网桥是否存在且状态为 UP -
ip addr show docker0—— 查看分配的 IP 和子网 -
brctl show(需安装bridge-utils)—— 查看挂载了哪些容器 veth 接口
若 docker0 缺失,先确认 Docker 服务已启动:sudo systemctl start docker。
修改默认 bridge 子网(仅当冲突时)
如果 172.17.0.0/16 与公司内网或其它服务冲突,可通过 daemon 配置调整:
- 编辑
/etc/docker/daemon.json(不存在则新建):
bip 设定 docker0 的 IP 和掩码,fixed-cidr 限制容器 IP 分配范围(可选)。保存后执行:sudo systemctl restart docker。注意:旧容器网络会失效,需重新运行。
创建自定义 bridge 网络(推荐生产环境)
相比直接改 docker0,docker network create 创建的用户定义 bridge 更安全、功能更全(支持 DNS 解析、容器名互通、子网隔离):
- 创建带子网的网络:
docker network create --driver bridge --subnet=10.10.20.0/24 --gateway=10.10.20.1 mybridge - 启动容器时指定:
docker run --network=mybridge --name app nginx - 已有容器也可接入:
docker network connect mybridge another-container
同一网络下的容器能直接用名字通信(如 ping app),无需记 IP,也不依赖 docker0。
让容器访问宿主机服务
容器常需调用宿主机上的数据库或 API。Docker 20.10+ 提供标准方式:
- 启动容器时加参数:
--add-host=host.docker.internal:host-gateway - 容器内即可用
host.docker.internal访问宿主机(等效于宿主机的 localhost) - 旧版本可用
--add-host=host.docker.internal:172.17.0.1(需确认 docker0 IP)
该方法稳定、跨平台,比硬编码宿主机 IP 或改路由更可靠。











