[英]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.