创建自定义bridge网络并运行容器实现容器名通信:先执行docker network create --driver bridge --subnet 192.168.50.0/24 --gateway 192.168.50.1 mynet,再用docker run -d --name app1 --network mynet nginx启动容器,即可通过容器名互ping。

创建带自定义网络的 Docker 容器,核心是两步:先建网络,再启动容器时指定该网络。默认 bridge 网络(docker0)不支持容器名互 ping 和灵活子网控制,所以生产环境推荐用自定义 bridge 网络。
创建自定义 bridge 网络
使用 docker network create 命令,可指定子网、网关、驱动等参数:
- 最简方式(Docker 自动分配子网):
docker network create mynet - 推荐方式(明确控制 IP 段,避免冲突):
docker network create --driver bridge --subnet 192.168.50.0/24 --gateway 192.168.50.1 mynet - 创建后可用
docker network ls查看,docker network inspect mynet查看详细配置(含网关、IPAM、已连接容器等)
启动容器并接入该网络
运行容器时用 --network 参数指定网络名称,容器会自动获得该网络下的 IP,并启用内置 DNS:
- 基础命令:
docker run -d --name app1 --network mynet nginx - 可同时指定端口映射、环境变量等其他参数:
docker run -d --name api --network mynet -p 8080:80 -e ENV=prod my-api-image - 多个容器接入同一自定义网络后,能直接用容器名通信(如
ping app1),无需额外配置
注意事项和常见问题
自定义网络虽方便,但需留意几个关键点:
- 容器默认能访问外网(如 curl google.com),因为 Docker 会为自定义 bridge 网络自动配置 iptables NAT 规则和 IP 转发
- 若容器无法上网,检查宿主机是否禁用了 IP 转发(
sysctl net.ipv4.ip_forward应为 1)或防火墙拦截了 docker0 或自定义网桥接口 - 一个容器可同时接入多个网络,用
docker network connect mynet container_name动态添加 - 网络删除前必须先停止并移除所有接入的容器,否则会报错
验证连通性
容器启动后,快速确认网络是否生效:
- 进入容器查看 IP:
docker exec app1 ip addr show eth0—— 应显示属于你设定子网的地址(如 192.168.50.2) - 测试容器间通信:
docker exec app1 ping -c 3 app2(前提是 app2 也在 mynet 中) - 测试外网访问:
docker exec app1 curl -I https://httpbin.org











