You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:05:36