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

SLIM PHP中使用PHINX无法连接MySQL容器执行迁移求助

解决Phinx连接Docker MySQL容器被拒绝的问题

错误原因分析

你遇到的SQLSTATE[HY000] [2002] Connection refused错误,核心是Phinx的数据库连接配置和Docker环境不匹配,分两种场景:

  • 如果你的PHP项目运行在本地(非Docker容器):Phinx默认使用3306端口连接,但你的MySQL容器把内部3306端口映射到了宿主机的3307,导致端口不匹配。
  • 如果你的PHP项目运行在Docker容器中:配置里的127.0.0.1指向容器自身,而非同网络下的MySQL容器,无法跨容器通信。

针对性解决方案

场景1:PHP项目在本地运行

修改phinx.php和Migration基类的配置,指定MySQL容器映射到宿主机的端口3307:

  1. 修改phinx.php配置
'result' => [
    // ...其他配置
    'environments' => [
        'default_environment' => 'dev',
        'default_database' => 'dev',
        'dev' => [
            'adapter' => 'mysql',
            'host' => '127.0.0.1',
            'port' => 3307, // 新增:指定宿主机映射端口
            'name' => 'db_slim',
            'user' => 'db_slim',
            'pass' => 'root',
        ]
    ]
];
  1. 修改Migration基类的连接配置
$this->capsule->addConnection([
    'driver' => 'mysql',
    'host' => '127.0.0.1',
    'port' => 3307, // 新增:对应宿主机映射端口
    'database' => 'db_slim',
    'username' => 'db_slim',
    'password' => 'root',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
]);

场景2:PHP项目在Docker容器中运行

确保PHP容器已加入php-challenge网络(和MySQL容器同网络),然后用Docker内部的服务名/容器名作为Host:

  1. 修改phinx.php配置
'result' => [
    // ...其他配置
    'environments' => [
        'default_environment' => 'dev',
        'default_database' => 'dev',
        'dev' => [
            'adapter' => 'mysql',
            'host' => 'mysql_slim', // 使用MySQL容器名或服务名`mysql`
            'port' => 3306, // 用容器内部原生端口,无需映射端口
            'name' => 'db_slim',
            'user' => 'db_slim',
            'pass' => 'root',
        ]
    ]
];
  1. 修改Migration基类的连接配置
$this->capsule->addConnection([
    'driver' => 'mysql',
    'host' => 'mysql_slim', // 或服务名`mysql`
    'port' => 3306,
    'database' => 'db_slim',
    'username' => 'db_slim',
    'password' => 'root',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
]);

额外检查项

  • 用docker ps确认mysql_slim容器处于运行状态
  • 用docker logs mysql_slim查看容器日志,确认MySQL服务已完全启动(避免容器刚启动还未就绪就执行迁移)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:31:08