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

Docker环境下PHP5.6+Yii1连接MySQL8.3失败求助

PHP5.6+Yii1+Docker+MySQL8.3 数据库连接失败解决方案

核心问题排查与修复步骤

1. 修正连接字符串的服务名拼写与冗余参数

你的Docker Compose中DB容器名称是yktoo-db,但连接字符串里写的是host=yktoodb(少了一个字母o),这是容器间DNS解析失败的直接原因。同时,Docker容器间通过TCP网络通信,不要同时指定host和unix_socket——app容器无法访问db容器内部的socket文件,直接移除该参数。

修正后的Yii数据库配置:

'db'=>array(                 
    'connectionString' => 'mysql:host=yktoo-db;port=3306;dbname=phpmyadmin',
    'emulatePrepare' => true,                
    'username' => 'xxx',              
    'password' => 'xxx',                 
    'charset' => 'utf8',
),

2. 适配MySQL8.3的认证插件

PHP5.6的PDO MySQL扩展不支持MySQL8.0+默认的caching_sha2_password认证插件,需将数据库用户切换为mysql_native_password:

  • 进入DB容器执行命令:
docker exec -it yktoo-db mysql -uroot -pxxxx
  • 执行SQL修改用户认证方式(替换xxx为你的实际用户名和密码):
ALTER USER 'xxx'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';
FLUSH PRIVILEGES;

3. 确保PHP容器安装PDO MySQL扩展

PHP5.6的Docker镜像默认可能未安装pdo_mysql扩展,需在Dockerfile-app中添加安装命令:

RUN docker-php-ext-install pdo_mysql

4. 网络连通性验证

如果仍无法连接,在app容器内执行以下命令排查:

  • 测试主机名解析:
docker exec -it yktoo-app ping yktoo-db
  • 测试端口连通性:
docker exec -it yktoo-app telnet yktoo-db 3306

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:29:49