使用 Docker 自定义网络 hyperf-net 实现 Hyperf 与 MySQL 容器互通:创建网络后,MySQL 容器以 mysql-db 为名加入,Hyperf 容器同样加入该网络,并在 .env 中配置 DB_HOST=mysql-db,即可通过服务名直接访问数据库。

用 Docker 网络让 Hyperf 连接数据库,核心是让容器之间能通过服务名或固定 IP 互相访问,而不是靠宿主机 localhost 或 127.0.0.1 —— 后者在容器内根本连不到其他容器。
创建自定义桥接网络
默认的 bridge 网络不支持容器间通过名称通信(仅支持 IP),必须显式创建用户定义网络:
- 运行
docker network create hyperf-net创建一个名为hyperf-net的网络 - 该网络自带 DNS 功能,容器加入后可直接用容器名当 host 名解析
- 避免使用
default网络,它不具备服务发现能力
启动数据库并加入网络
以 MySQL 为例,启动时指定网络和别名(便于识别):
docker run -d --name mysql-db --network hyperf-net -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql:5.7- 此时在同网络下的其他容器中,
mysql-db就是有效 host 名 - 无需查 IP,也不用
docker inspect手动找地址
启动 Hyperf 并加入同一网络
Hyperf 容器也必须加入 hyperf-net,才能与数据库互通:
- 若用
docker run:加参数--network hyperf-net - 若用
docker-compose.yml:在 services 下统一声明networks: [hyperf-net],并在 networks 段定义该网络 - .env 中 DB_HOST 直接写
mysql-db,端口保持3306(容器内端口,非宿主机映射端口)
验证连接是否生效
进 Hyperf 容器测试通不通:
docker exec -it your-hyperf-container sh-
ping mysql-db(应能通) -
telnet mysql-db 3306或nc -zv mysql-db 3306(确认端口开放) - 再执行
php bin/hyperf.php db:info(需安装 hyperf/db 组件)看能否列出表


















