Bridge桥接通过docker0虚拟网桥和iptables NAT规则实现宿主机与容器端口联动,-p参数映射端口后,宿主机可访问容器服务,自定义bridge网络支持子网指定与容器名DNS解析。
Bridge 桥接实现容器与宿主机端口联动,本质是让宿主机的某个端口接收外部请求,并将流量准确转发到容器内部服务端口。这不需要修改内核或手动建网桥,Docker 默认 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 欢迎页,验证容器可达端口映射是宿主机与容器联动最常用、最可靠的方式,由 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(同一容器暴露双端口)默认 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
localhost:9000 访问,且该网络内容器名可解析(如 curl web1)端口联动失败通常源于三类问题:映射未生效、防火墙拦截、容器服务未监听。
docker port <容器名> 应显示类似 80/tcp -> 0.0.0.0:8080
0.0.0.0:80 而非 127.0.0.1:80(后者仅限容器内部访问)sudo ufw allow 8080
ports: 下写法正确,如 - "8080:80",而非 - "8080-80"