Symfony 4.4测试环境连接Docker数据库报错求助
解决Docker环境下Symfony 4.4 PHPUnit测试数据库连接失败问题
错误原因分析
你遇到的SQLSTATE[HY000] [2002]错误,核心是PHP无法解析数据库服务器地址,根源在于测试环境数据库连接配置与运行环境不匹配:
- 非测试环境用
localhost:4306是通过主机端口映射访问Docker数据库容器,但在Docker容器内部执行PHPUnit时,localhost指向的是当前Symfony容器,而非数据库容器。 - 你的Docker Compose中数据库服务名为
database,容器内部端口是3306,主机映射端口是4306,两种环境的访问逻辑完全不同。
针对性解决方案
情况1:在Docker容器内部执行PHPUnit
修改.env.test.local中的DATABASE_URL,将主机地址改为Docker Compose的数据库服务名,端口使用容器内部的3306:
DATABASE_URL=mysql://symfony:symfony@database:3306/db-name?serverVersion=8.0
Docker Compose服务间可通过服务名直接通信,database会被自动解析到对应数据库容器的IP,无需依赖主机端口映射。
情况2:在主机上执行PHPUnit
保持localhost作为主机地址,使用主机映射的4306端口:
DATABASE_URL=mysql://symfony:symfony@localhost:4306/db-name?serverVersion=8.0
确保数据库容器已启动(执行docker-compose up -d database),且主机能通过4306端口访问数据库(可通过mysql -h localhost -P 4306 -u symfony -p测试连接)。
额外验证步骤
- 确认测试环境配置加载:执行
php bin/console debug:container --env=test doctrine.dbal.connection.default,检查输出中的url参数是否与配置一致。 - 清除测试环境缓存:执行
php bin/console cache:clear --env=test,避免缓存旧的数据库连接配置。 - 检查数据库容器状态:执行
docker ps,确认database容器处于Up状态。
内容的提问来源于stack exchange,提问作者Dima Rashevskiy
相关产品推荐
相关产品推荐

