如何通过 bridge 桥接实现容器与宿主机宿主机的端口联动教程

作者:袖梨 2026-06-17
Bridge桥接通过docker0虚拟网桥和iptables NAT规则实现宿主机与容器端口联动,-p参数映射端口后,宿主机可访问容器服务,自定义bridge网络支持子网指定与容器名DNS解析。

Bridge 桥接实现容器与宿主机端口联动,本质是让宿主机的某个端口接收外部请求,并将流量准确转发到容器内部服务端口。这不需要修改内核或手动建网桥,Docker 默认 bridge 模式已内置完整支持,关键在于正确配置和理解数据流向。

确认默认 bridge 网络可用

Docker 启动后自动创建 docker0 虚拟网桥(如 172.17.0.1/16),所有未指定网络的容器默认接入此网桥。宿主机能直接 ping 通该网桥 IP,也意味着基础通信链路已就绪。

  • 运行 ip addr show docker0 查看网桥状态和 IP,确保 UP 状态
  • 执行 docker run -d --name test-nginx nginx 启动测试容器
  • 在宿主机上 curl http://172.17.0.2(容器 IP)应返回 Nginx 欢迎页,验证容器可达

使用 -p 参数完成端口映射

端口映射是宿主机与容器联动最常用、最可靠的方式,由 Docker 自动配置 iptables NAT 规则实现。

  • 格式为 -p [宿主机IP:]宿主机端口:容器端口[/协议],例如:docker run -p 8080:80 nginx
  • 宿主机访问 http://localhost:8080 即可命中容器内 80 端口服务
  • 若需绑定特定宿主机网卡(如仅允许局域网访问),可写成 -p 192.168.1.100:8080:80
  • 多个映射用多个 -p,如 -p 3306:3306 -p 33060:3306(同一容器暴露双端口)

自定义 bridge 网络增强可控性

默认 docker0 网段固定(172.17.0.0/16),若需隔离、指定子网或避免冲突,推荐创建自定义 bridge 网络。

  • 创建: docker network create --subnet=192.168.100.0/24 --gateway=192.168.100.1 mynet
  • 运行容器时指定: docker run -p 9000:80 --network mynet nginx
  • 此时容器获得 192.168.100.x 地址,宿主机仍可通过 localhost:9000 访问,且该网络内容器名可解析(如 curl web1)

验证与排错要点

端口联动失败通常源于三类问题:映射未生效、防火墙拦截、容器服务未监听。

  • 检查映射是否建立:docker port <容器名> 应显示类似 80/tcp -> 0.0.0.0:8080
  • 确认容器内服务监听 0.0.0.0:80 而非 127.0.0.1:80(后者仅限容器内部访问)
  • 宿主机防火墙(如 ufw、firewalld)需放行对应端口,例如 sudo ufw allow 8080
  • 若用 Docker Compose,确保 ports: 下写法正确,如 - "8080:80",而非 - "8080-80"

相关文章

精彩推荐