Hyperf 3.1 中 DB_HOST 应填数据库实际主机地址(如 mysql 或 10.10.20.5),避免 localhost;DB_PORT 必须为整数且与数据库监听端口严格一致(如 3306 或 5432),不可加引号,并需确保 .env、配置文件、服务状态三者对齐。

在 Hyperf 3.1 中,.env 文件用于集中管理环境相关的数据库连接参数,其中 DB_HOST 和 DB_PORT 是最基础的两项配置,直接影响应用能否连上数据库。
DB_HOST 配置要点
DB_HOST 指的是数据库服务所在的主机地址。本地开发常用 127.0.0.1 或 localhost;Docker 环境中建议用容器名(如 mysql),避免使用 localhost(它在容器内会指向本容器而非宿主机);生产环境则填实际数据库服务器 IP 或域名。
- ✅ 推荐写法:
DB_HOST=mysql(Docker Compose 场景)或DB_HOST=10.10.20.5(私有云) - ❌ 避免写法:
DB_HOST=localhost(在容器里常导致连接失败) - ⚠️ 注意:Hyperf 不会自动解析
localhost为127.0.0.1,若 MySQL 绑定的是127.0.0.1,而你写localhost,某些系统可能走 socket 连接,引发不一致问题
DB_PORT 配置要点
DB_PORT 是数据库监听的端口,默认 MySQL 是 3306,PostgreSQL 是 5432。它必须与数据库实际监听端口严格一致,且不能带引号。
- ✅ 正确示例:
DB_PORT=3306、DB_PORT=5432 - ❌ 错误示例:
DB_PORT="3306"(字符串类型会被 dotenv 解析为字符串,但 Hyperf 的 DB 组件期望整数,可能导致连接池初始化失败) - ? 提示:如果数据库运行在非标准端口(比如
3307),务必同步检查防火墙、Docker port 映射(-p 3307:3307)和数据库配置文件(my.cnf中的port)是否匹配
配套检查项(容易忽略)
仅配好 .env 不够,还需确认以下三点是否对齐:
- config/autoload/db.php 或 databases.php 中,对应字段是否通过
env()正确读取,例如:'host' => env('DB_HOST', 'localhost') - 数据库服务本身已启动并可被当前 PHP 进程访问(可用
telnet $DB_HOST $DB_PORT快速验证) - Hyperf 启动后,日志中应出现类似
DB[default] connected的提示;若报Connection refused,优先排查DB_HOST是否可达、DB_PORT是否开放











