CDbConnection 无法打开数据库连接:SQLSTATE[HY000] [2002] 没有这样的文件或目录 PHP+DOCKER+YII+MYSQL

问题描述 投票:0回答:1

自上周以来我一直在与这个问题作斗争。

我有一个使用 YII V.1 的 php 5.6 项目。我使用 MySQL 8.3,因为这是我的 mac 架构唯一允许的。

我在 Docker 中设置了项目,一切看起来都很好,直到应用程序要求我提供凭据 进入。一旦我按下提交,我就会收到此错误:

/var/www/html/fw/1.1.16/framework/db/CDbConnection.php(399)

387                 throw new CDbException('CDbConnection.connectionString cannot be empty.');
388             try
389             {
390                 Yii::trace('Opening DB connection','system.db.CDbConnection');
391                 $this-\>\_pdo=$this-\>createPdoInstance();
392                 $this-\>initConnection($this-\>\_pdo);
393                 $this-\>\_active=true;
394             }
395             catch(PDOException $e)
396             {
397                 if(YII_DEBUG)
398                 {
399                     throw new CDbException('CDbConnection failed to open the DB connection: '.
400                         $e-\>getMessage(),(int)$e-\>getCode(),$e-\>errorInfo);
401                 }
402                 else
403                 {
404                     Yii::log($e-\>getMessage(),CLogger::LEVEL_ERROR,'exception.CDbException');
405                     throw new CDbException('CDbConnection failed to open the DB connection.',(int)$e-\>getCode(),$e-\>errorInfo);
406                 }
407             }
408         }
409     }
410     /\*\*\

我检查了 docker,数据库运行正常并且数据库凭据也正常。

有关插座的信息: yktoo-db | yktoo-db | 2024-05-14T16:23:01.937766Z 0 [系统] [MY-011323] [服务器] X 插件已准备好连接。绑定地址:'::'端口:33060,套接字:/var/run/mysqld/mysqlx.sock yktoo-db | yktoo-db | 2024-05-14T16:23:01.937783Z 0 [系统] [MY-010931] [服务器] /usr/sbin/mysqld:准备连接。版本:'8.3.0'套接字:'/var/run/mysqld/mysqld.sock'端口:3306 MySQL Commu

.YML 文件:

services:
    app:
        build:
            context: .
            dockerfile: ./Dockerfile-app
        container_name: yktoo-app
        ports:
            - "80:80"
        volumes:
            - /Users/xxx/Desktop/sar/var/www/html:/var/www/html
    db:
        build:
            context: .
            dockerfile: ./Dockerfile-db
        container_name: yktoo-db
        environment:
            MYSQL_ROOT_PASSWORD: "xxxx"

这是连接的代码片段:



'db'=>array(                 
'connectionString' => 'mysql:host=yktoodb;port=3306;dbname=phpmyadmin;
unix_socket=/var/run/mysqld/mysqld.sock',                 'emulatePrepare' => true,                
'username' => 'xxx',              
'password' => 'xxx',                 
'charset' => 'utf8',`

有什么想法吗?非常感谢你!

我尝试更改 yktoo-db 的 IP,但没有成功。 我尝试使用 yktoo-db:3306 但没有成功。

php mysql docker yii1.x
1个回答
0
投票

你的应用程序位于一个容器中,mysql数据库位于另一个容器中,这意味着mysql是一个远程数据库。套接字只能用于本地连接,不能用于远程。

解决方案是使用 mysql 容器名称或 IP 地址作为主机名以及为 mysql 配置的任何端口的 tcp 连接。

© www.soinside.com 2019 - 2024. All rights reserved.