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

PhpStorm运行Docker内PHPUnit测试报数据库连接错误如何解决

问题根因

你在sp_php容器内手动执行vendor/bin/phpunit能正常跑通,说明项目代码、数据库权限、容器本身的配置都没有问题。报错核心原因是PhpStorm点击运行按钮启动PHPUnit时,拉起的PHP执行容器没有加入到docker-compose定义的internal自定义网络,容器内置的DNS无法解析同网络下MySQL的容器名sp_mysql,最终触发getaddrinfo failed的域名解析错误。

修复步骤

按优先级依次排查调整即可:

  • 检查PHPUnit绑定的PHP解释器配置
    打开PhpStorm设置,进入Languages & Frameworks > PHP > Test Frameworks页面,核对当前PHPUnit关联的PHP解释器:
    • 禁止直接选择sp/php镜像作为独立Docker容器的解释器,这种启动方式不会加载docker-compose定义的网络、依赖服务配置,属于孤立容器,自然找不到同网络下的MySQL
    • 必须选择基于当前项目docker-compose创建的php服务作为解释器,选择后PhpStorm拉起容器时会自动继承compose里配置的网络规则
  • 手动补全容器网络配置(如果选了compose解释器仍报错)
    点击右上角运行配置的下拉框,找到你当前用的PHPUnit运行项进入编辑页:
    1. 找到Docker容器的高级设置区域
    2. 在Network配置项里手动填入compose创建的网络名,默认命名规则是[你的项目根目录文件夹名]_internal,可以在终端执行docker network ls从输出列表里找到对应准确名称
    3. 保存配置后重新触发测试
  • 配置有效性校验
    调整完可以先通过PhpStorm的Docker工具窗口进入对应PHP容器的终端,执行getent hosts sp_mysql,如果能正常返回MySQL容器的IP地址,说明网络连通性已经恢复,再执行测试就不会触发连接报错。

注意:不要临时把.env里的database_host改成127.0.0.1或者宿主机公网/局域网IP,容器内的127.0.0.1指向容器自身,除非你手动配置了host网络模式,否则这种改法不仅会让手动进容器执行phpunit的逻辑失效,还会引出新的端口映射、权限类问题。

内容的提问来源于stack exchange,提问作者Kostya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:22