簡體   English   中英

建立與 CakePHP 數據庫的連接時出錯

[英]Error establishing connection to CakePHP database

我想學習 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 由於某種原因無法連接到數據庫。

如何解決?

PS:

順便說一句,如果我在瀏覽器中打開一個新安裝的框架,那么“數據庫”塊中也會出現錯誤

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',

不工作。

您使用mariadb作為主機而不是實際 MySQL 容器的 IP。 通常您可以使用localhost但由於您使用的是 Docker,這是不可能的。 確保使用 MySQL/MariaDB 容器的 IP。

如果您不知道如何操作,請使用docker ps ,它會顯示您所有的 containerID。 然后在正確的容器中查找 IP(使用 containerID) docker inspect CONTAINERIDGOESHERE | grep "IPAddress" 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM