docker默认bridge模式可满足hyperf单机通信需求,需确保容器接入同一bridge网络、使用内网ip直连、server.host设为0.0.0.0并监听对应端口。

确认默认 bridge 网络可用
Docker 启动后自动创建 docker0 网桥,默认子网是 172.17.0.0/16,网关为 172.17.0.1。Hyperf 容器只要没指定其他网络,就会自动接入这个网络并获得类似 172.17.0.x 的 IP。
- 运行
docker network ls查看是否有bridge类型网络(状态应为 active) - 用
docker network inspect bridge确认子网、网关和已连接容器 - 启动 Hyperf 容器时不要加
--network=host或--network=none,避免脱离 bridge
Hyperf 容器间用内网 IP 直连
在 bridge 模式下,容器之间不依赖 DNS 或服务发现,直接用 Docker 分配的 IP 就能通信。比如:
- A 容器(Hyperf API)IP 是
172.17.0.2,监听9501 - B 容器(Hyperf WebSocket 或 RPC client)用
172.17.0.2:9501发起请求即可 - Hyperf 内部调用(如
HttpClient或RedisClient)填这个 IP 和端口,无需改 host 文件或设域名
推荐用自定义 bridge 提升可控性
默认 bridge 网络不支持容器名解析(--link 已弃用),也不便于管理 IP 段。建议创建一个命名的自定义 bridge:
- 执行:
docker network create --subnet=172.20.0.0/16 hyperf-net - 启动容器时显式指定:
docker run --network=hyperf-net ... - 或在
docker-compose.yml中统一声明:networks: default: name: hyperf-net external: true - 这样所有容器会自动获得
172.20.0.x地址,且支持通过容器名互相访问(例如curl http://hyperf-api:9501/health)
端口映射只影响外部访问,不影响内部通信
-p 9501:9501 这类映射仅用于宿主机或外网访问,对容器间通信无影响。Hyperf 容器之间通信走的是内部 bridge 子网,不经过 NAT 或 iptables 端口转发规则。
- 所以 A 容器调用 B 容器,用
B容器IP:实际监听端口(如172.20.0.3:9502),不是映射端口 - Hyperf 配置中的
server.host应设为0.0.0.0,确保监听所有接口,而非127.0.0.1 - 检查
netstat -tuln或ss -tuln确认服务确实在容器内监听了对应端口











