【问题标题】:Error establishing connection to CakePHP database与 CakePHP 数据库建立连接时出错
【发布时间】:2021-01-22 06:10:08
【问题描述】:

我想学习 CakePHP 并立即得到奇怪的错误 =) 尝试通过控制台创建模型

bin/cake bake model Posts

得到一个错误

root@5b118a83e609:/var/www/public/cake# bin/cake bake model Posts
One moment while associations are detected.
Exception: Connection to Mysql could not be established: SQLSTATE[HY000] [2002] No such file or directory
In [/var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver.php, line 140]

2020-10-07 09:23:42 Error: [Cake\Database\Exception\MissingConnectionException] Connection to Mysql could not be established: SQLSTATE[HY000] [2002] No such file or directory in /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver.php on line 140
Exception Attributes: array (
  'driver' => 'Mysql',
  'reason' => 'SQLSTATE[HY000] [2002] No such file or directory',
)
Stack Trace:
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php:178
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Schema/SchemaDialect.php:47
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php:230
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Schema/Collection.php:53
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Connection.php:399
- /var/www/public/cake/vendor/cakephp/bake/src/Utility/TableScanner.php:65
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:1060
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:191
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:122
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:98
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:81
- /var/www/public/cake/vendor/cakephp/cakephp/src/Console/BaseCommand.php:179
- /var/www/public/cake/vendor/cakephp/cakephp/src/Console/CommandRunner.php:336
- /var/www/public/cake/vendor/cakephp/cakephp/src/Console/CommandRunner.php:171
- /var/www/public/cake/bin/cake.php:12

Caused by: [PDOException] SQLSTATE[HY000] [2002] No such file or directory in /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver.php on line 132
Stack Trace:
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver.php:132
- /var/www/public/cake/vendor/cakephp/cakephp/src/Core/Retry/CommandRetry.php:70
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver.php:138
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php:178
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Schema/SchemaDialect.php:47
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php:230
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Schema/Collection.php:53
- /var/www/public/cake/vendor/cakephp/cakephp/src/Database/Connection.php:399
- /var/www/public/cake/vendor/cakephp/bake/src/Utility/TableScanner.php:65
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:1060
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:191
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:122
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:98
- /var/www/public/cake/vendor/cakephp/bake/src/Command/ModelCommand.php:81
- /var/www/public/cake/vendor/cakephp/cakephp/src/Console/BaseCommand.php:179
- /var/www/public/cake/vendor/cakephp/cakephp/src/Console/CommandRunner.php:336
- /var/www/public/cake/vendor/cakephp/cakephp/src/Console/CommandRunner.php:171
- /var/www/public/cake/bin/cake.php:12

设置 100% 正确:config/app.php

'host' =>  'mariadb',
'port' =>  3306,
'username' =>  'root',
'password' =>  'password',
'database' =>  'database',

我正在使用 Docker。附近有 Yii2、Laravel、Symfony 和 WordPress。一切正常,没有任何错误,但 CakePHP 出于某种原因无法连接到数据库。

如何解决?

附:

顺便说一句,如果我在浏览器中打开一个新安装的框架,那么“数据库”块中也会出现错误

CakePHP is NOT able to connect to the database.
Connection to Mysql could not be established: SQLSTATE[HY000] [2002] No such file or directory

同时,我尝试通过原生PHP函数mysql_connect直接连接数据库——一切正常!但是 CakePHP 不想工作。

我已经尝试将主机从 mariadb 更改为 Docker 容器的 IP,但没有帮助。

'host' =>  '192.168.32.3',
'port' =>  3306,
'username' =>  'root',
'password' =>  'password',
'database' =>  'database',

不工作。

【问题讨论】:

    标签: php mysql docker cakephp mariadb


    【解决方案1】:

    您使用mariadb 作为主机,而不是实际 MySQL 容器的 IP。通常您可以使用localhost,但由于您使用的是 Docker,所以这是不可能的。确保使用 MySQL/MariaDB 容器的 IP。

    如果您不知道如何操作,请使用docker ps,它会显示您所有的 containerID。 然后在正确的容器中查找IP(带有containerID)docker inspect CONTAINERIDGOESHERE | grep "IPAddress"

    在你的数据库连接中使用这个 IP 而不是 localhost,你就设置好了。

    所以你的配置看起来像这样:

    'host' =>  '172.19.0.2', // This is example IP, replace it with your found IP
    'port' =>  3306,
    'username' =>  'root',
    'password' =>  'password',
    'database' =>  'database',
    

    更新的答案: 请不要使用 IP 连接到容器。 IP 可以在容器重新创建时发生变化,因此是一种不好的做法。请改用容器名称。只需确保将网络行添加到容器和全局。看起来像这样:

    version: "3.1"
    services:
    
      mariadb:
        image: mariadb:10.6
        container_name: mariadb
        working_dir: /application
        volumes:
          - .:/application
        ports:
          - "1027:3306"
        networks:
          - application
    
      webserver:
        container_name: webserver
        image: nginx:alpine
        working_dir: /application
        volumes:
          - .:/application
        ports:
          - "1025:80"
        networks:
          - application
    networks:
      application:
    

    您的数据库连接字符串如下所示:root:root@containerNameb/dbName

    【讨论】:

    • 我已经尝试将主机从 mariadb 更改为我的 IP,但对我没有帮助。
    • mariadb 绝对不正确,因为它不是主机或主机名,它应该是 MySQL Docker 容器 (172.19.0.x) 的硬编码 IP。
    • 那是你主机PC的IP,你需要使用你的Docker容器的IP。
    • 你上面写的命令,给我这个容器的IP。
    • 您的 Docker 文件中是否有网络模式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2023-03-16
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多