拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Docker 的 bridge 网络模式如何配置和使用

Docker 的 bridge 网络模式是其默认且最常用的网络模式。下面从基础概念、配置方法、实战案例、调试技巧四个方面详细介绍。一、Bridge 网络模式基础1.1 什么是 Bridge 网络Bridge 网络是 Docker 使用 Linux 网桥bridge技术在宿主机上创建的虚拟网络让容器之间、容器与宿主机之间可以相互通信。工作原理图外部网络宿主机eth0 物理网卡docker0 网桥veth pair1容器1 eth0veth pair2容器2 eth0veth pair3容器3 eth0互联网1.2 两种 Bridge 网络类型创建方式特点适用场景默认 bridgeDocker 自动创建容器通过 IP 通信,不支持 DNS 解析简单测试自定义 bridgedocker network create支持 DNS 解析,隔离性好,推荐使用生产环境二、默认 Bridge 网络的使用2.1 查看默认 bridge# 查看所有网络dockernetworklsNETWORK ID NAME DRIVER SCOPE abc123def456 bridge bridgelocaldef456abc123hosthostlocal789abc123def none nulllocal# 查看默认 bridge 详情dockernetwork inspect bridge默认 bridge 配置{Name:bridge,Id:abc123def456...,Driver:bridge,IPAM:{Config:[{Subnet:172.17.0.0/16,Gateway:172.17.0.1}]}}2.2 使用默认 bridge 运行容器# 运行容器默认就是 bridgedockerrun-d--nameweb1 nginx# 指定使用 bridge可省略dockerrun-d--nameweb2--networkbridge nginx# 查看容器 IPdockerinspect web1|grepIPAddress# IPAddress: 172.17.0.2dockerinspect web2|grepIPAddress# IPAddress: 172.17.0.3# 容器间通过 IP 通信dockerexecweb1ping172.17.0.3# ✅ 可以 ping 通dockerexecweb1pingweb2# ❌ 不行默认 bridge 不支持 DNS2.3 端口映射# 将容器端口映射到宿主机dockerrun-d\--nameweb\-p8080:80\# 宿主机 8080 → 容器 80-p8443:443\# 多个端口nginx# 查看端口映射dockerport web# 80/tcp - 0.0.0.0:8080# 443/tcp - 0.0.0.0:8443# 随机端口映射dockerrun-d-p80nginxdockerport容器80# 80/tcp - 0.0.0.0:32768三、自定义 Bridge 网络推荐3.1 创建自定义网络# 创建自定义 bridge 网络dockernetwork create\--driverbridge\--subnet172.20.0.0/16\--gateway172.20.0.1\--ip-range172.20.5.0/24\mynet# 查看网络列表dockernetworkls# 查看网络详情dockernetwork inspect mynet3.2 在自定义网络中运行容器# 运行容器并连接到自定义网络dockerrun-d\--nameapp1\--networkmynet\nginxdockerrun-d\--nameapp2\--networkmynet\alpinesleep3600# 自定义网络支持容器名 DNS 解析dockerexecapp2pingapp1# ✅ 可以 ping 通dockerexecapp2curlhttp://app1:80# ✅ 通过容器名访问3.3 固定 IP 分配# 创建网络预留一段 IPdockernetwork create\--subnet172.20.0.0/16\--ip-range172.20.1.0/24\mynet2# 指定固定 IP 运行容器dockerrun-d\--namemysql\--networkmynet2\--ip172.20.1.100\mysql:8.0# 验证 IPdockerinspect mysql|grepIPAddress3.4 网络别名# 给容器设置别名dockerrun-d\--nameredis\--networkmynet\--network-alias cache\--network-alias session-store\redis:alpine# 其他容器可以通过别名访问dockerrun--rm\--networkmynet\alpine\sh-cping cache ping session-store四、容器与网络的动态连接4.1 连接和断开# 运行容器时不指定网络在默认 bridgedockerrun-d--nameweb3 nginx# 动态连接到自定义网络dockernetwork connect mynet web3# 查看容器网络现在有两个网络接口dockerinspect web3|grep-A10Networks# 断开网络dockernetwork disconnect mynet web3# 同时指定 IP 连接dockernetwork connect\--ip172.20.1.50\mynet web34.2 多网络连接# 一个容器可以连接多个网络dockerrun-d\--namegateway\--networkfrontend\nginx# 再连接到另一个网络dockernetwork connect backend gateway# 查看路由dockerexecgateway route-n# 可以通过不同网络访问不同服务五、Docker Compose 中的 Bridge 网络5.1 基础配置version:3.8services:web:image:nginx ports:-8080:80networks:-frontend-backend app:build:. environment:-DB_HOSTmysql-REDIS_HOSTredis networks:-backend mysql:image:mysql:8.0networks:-backend volumes:-mysql-data:/var/lib/mysql redis:image:redis:alpine networks:-backendnetworks:frontend:driver:bridge ipam:config:-subnet:172.21.0.0/24 backend:driver:bridge internal:true# 内网,不能访问外网volumes:mysql-data:5.2 固定 IP 配置version:3.8services:mysql:image:mysql:8.0networks:backend:ipv4_address:172.20.0.10networks:backend:ipam:config:-subnet:172.20.0.0/24 gateway:172.20.0.1六、高级配置6.1 自定义网桥参数# 创建带 MTU 设置的网络dockernetwork create\-ocom.docker.network.driver.mtu1450\mynet-mtu# 禁用容器间通信dockernetwork create\-ocom.docker.network.bridge.enable_iccfalse\isolated-net# 启用 IP 伪装默认开启dockernetwork create\-ocom.docker.network.bridge.enable_ip_masqueradetrue\nat-net6.2 修改 Docker 守护进程配置// /etc/docker/daemon.json{bip:172.17.0.1/16,// 自定义默认 bridge IPfixed-cidr:172.17.0.0/16,// 容器 IP 范围mtu:1450,// 调整 MTUdefault-address-pools:[{base:172.80.0.0/16,size:24}]}# 重启 Docker 生效systemctl restartdocker七、实战案例7.1 案例Web 应用 数据库 Redis# 1. 创建网络dockernetwork create--subnet172.22.0.0/16 app-net# 2. 启动 MySQL固定 IPdockerrun-d\--namemysql\--networkapp-net\--ip172.22.0.10\-eMYSQL_ROOT_PASSWORDroot\-eMYSQL_DATABASEmyapp\-vmysql-data:/var/lib/mysql\mysql:8.0# 3. 启动 Redisdockerrun-d\--nameredis\--networkapp-net\-vredis-data:/data\redis:alpine# 4. 启动应用dockerrun-d\--nameapp\--networkapp-net\-p8080:8080\-eDB_HOSTmysql\-eDB_PORT3306\-eDB_NAMEmyapp\-eDB_USERroot\-eDB_PASSWORDroot\-eREDIS_HOSTredis\-eREDIS_PORT6379\myapp:latest# 5. 启动 Nginx反向代理dockerrun-d\--namenginx\--networkapp-net\-p80:80\-v./nginx.conf:/etc/nginx/nginx.conf:ro\nginx:alpine# 6. 验证curlhttp://localhostdockerexecapppingmysqldockerexecapppingredis7.2 案例多环境隔离# 创建不同环境的网络dockernetwork create--subnet172.23.0.0/16 dev-netdockernetwork create--subnet172.24.0.0/16 test-netdockernetwork create--subnet172.25.0.0/16 prod-net# 开发环境dockerrun-d--nameapp-dev--networkdev-net myapp:dev# 测试环境dockerrun-d--nameapp-test--networktest-net myapp:test# 生产环境dockerrun-d--nameapp-prod--networkprod-net myapp:prod# 环境完全隔离dockerexecapp-devpingapp-test# ❌ 不通八、故障排查8.1 常用调试命令# 查看网络列表dockernetworkls# 查看网络详情dockernetwork inspect mynet# 查看容器网络dockerinspect容器|grep-A20Networks# 进入容器测试dockerexec-itappshipaddr route-ncat/etc/resolv.confpinggoogle.compingmysqlcurlhttp://web:8080# 查看网桥brctl showipaddr show docker0 iptables-tnat-L-n|grep172.178.2 常见问题解决问题1容器间无法通信# 检查是否在同一网络dockernetwork inspect mynet|grep-A10Containers# 检查网络策略dockernetwork inspect mynet|grepEnableICC# 临时允许通信dockernetwork connect mynet container2问题2无法访问外网# 检查 IP 转发sysctlnet.ipv4.ip_forward# 如果为 0开启echo1/proc/sys/net/ipv4/ip_forward# 检查 NAT 规则iptables-tnat-LPOSTROUTING-v# 检查 DNScat/etc/docker/daemon.json# 添加 DNS 配置{dns:[8.8.8.8,114.114.114.114]}问题3端口映射不生效# 检查端口是否被占用netstat-tlnp|grep8080# 检查防火墙iptables-L-n|grep8080# 查看容器是否监听正确端口dockerexecnginxnetstat-tlnp九、最佳实践总结9.1 选择指南场景推荐方案原因单机多容器应用自定义 bridge有 DNS 解析,方便简单测试默认 bridge快速启动需要固定 IP自定义 bridge 固定 IPIP 可控环境隔离多个自定义 bridge完全隔离开发环境Docker Compose bridge配置简单9.2 安全配置# 创建内部网络不能访问外网dockernetwork create--internalsecure-net# 限制容器间通信dockernetwork create\-ocom.docker.network.bridge.enable_iccfalse\isolated-net# 使用防火墙限制iptables-IDOCKER-USER-ieth0-s192.168.1.0/24-jACCEPT iptables-IDOCKER-USER-ieth0!-s192.168.1.0/24-jDROP十、总结特性默认 bridge自定义 bridgeDNS 解析❌ 不支持✅ 支持网络隔离中高配置灵活低高适用场景简单测试生产环境一句话理解Bridge 网络就是 Docker 在宿主机上创建的虚拟交换机通过veth pair连接容器实现容器间通信和端口映射。自定义 bridge 比默认的更强大支持 DNS 解析是生产环境的首选。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门