Docker容器网络桥接配置从零上手:创建、连接与避坑指南
桥接网络是什么?准备工作有哪些?
Docker 桥接网络(bridge)是容器的默认网络模式,每个容器通过虚拟网桥 docker0 与宿主机通信,同时也能互相访问。适用场景:单机多容器需要共享网络并实现互联(比如 Web 容器 + 数据库容器)。
动手前确保 Docker 已安装并运行,执行 docker network ls 能看到三个默认网络——bridge、host、none。
其中 bridge 就是默认桥接网络,但它不支持通过容器名直接通信,所以我们后面会创建自定义桥接。
创建自定义桥接网络
自定义桥接网络的核心优势:自带 DNS 解析,容器之间可以用容器名直接 ping 通,不用记 IP。
创建命令非常简单:
docker network create my-bridge
如果担心子网冲突,可以手动指定网段(比如内网常用 172.20.0.0/16):
docker network create --subnet=172.20.0.0/16 my-bridge
创建后用 docker network ls 确认新网络出现。
将容器接入桥接网络并实现互访
启动容器时直接指定网络:
docker run -d --name web1 --network my-bridge nginx
docker run -d --name web2 --network my-bridge nginx
两个容器都在 my-bridge 下。验证连通性:进入 web1 容器 ping web2:
docker exec -it web1 bash
ping web2
应该能收到响应。
如果容器已经启动,可以用 docker network connect 动态加入:
docker network connect my-bridge web1
注意:只有在自定义桥接网络下才支持容器名解析,默认 bridge 不行。
端口映射与外部访问配置
桥接模式下要让宿主机访问容器,必须做端口映射。
例如把宿主机的 8080 端口映射到 web1 容器的 80 端口:
docker run -d -p 8080:80 --name web1 --network my-bridge nginx
然后浏览器访问 宿主机IP:8080 就能看到 nginx 欢迎页。避坑:如果宿主机已有服务占用 8080,更换一个端口;
多个容器映射同一端口会冲突,必须使用不同宿主机端口。
自定义桥接网络不影响端口映射,两者可同时使用。
高频错误排查与验证
常见问题 1:容器间 ping 不通。
- 确认两个容器在同一个自定义网络下(
docker inspect 容器名查看 Networks 字段)。 - 不要用 IP 测试,用容器名。
常见问题 2:宿主机无法访问容器端口。
- 检查容器是否加了
-p参数,且映射端口未被占用。 - 宿主机防火墙是否放开对应端口(如
firewall-cmd --add-port=8080/tcp)。
验证总结:
- 网络情况:
docker network inspect my-bridge查看已连接的容器列表。 - 内部通信:进容器执行
curl http://web2,能返回网页说明容器间 http 通信正常。 - 外部访问:浏览器或 curl 请求宿主机映射端口,收到响应即成功。
如果你正在处理 Docker容器网络桥接配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分,通常就是网络名写错、防火墙拦截或端口冲突。