为了账号安全,请及时绑定邮箱和手机立即绑定

Docker 无法连接到 cake php

Docker 无法连接到 cake php

PHP
一只萌萌小番薯 2023-05-26 16:58:02
HY 我在设置中有一个 docker 容器,我得到一个错误,系统无法连接到数据库,我不知道这是怎么回事。我尝试连接到本地主机、127.0.0.1 和 mysql,但出现相同的错误:CakePHP 无法连接到数据库。无法建立与 Mysql 的连接:SQLSTATE[HY000] [2002] 没有这样的文件或目录似乎无法在日志文件(apache 和 cake)中找到任何内容,我缺少什么?PHP代码: 'default' => [            //'className' =>'Cake\Database\Connection',            'className' => Connection::class,            'driver' => Mysql::class,            //'driver' => 'Cake\Database\Driver\Mysql',            'persistent' => false,            'timezone' => 'UTC',            'encoding' => 'utf8',            'host' => 'mysql',            'username' => 'myusername',            'password' => 'mypassword',            'database' => 'myadatabase',            'flags' => [],            'cacheMetadata' => true,            'log' => false,            'quoteIdentifiers' => false,        ],docker-compose.yml#File version 2.1version: "3"services:  webserver:    build:       context: ./bin/webserver    container_name: '7.3.x-webserver'    restart: 'always'    ports:      - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"      - "${HOST_MACHINE_SECURE_HOST_PORT}:443"    links:      - mysql    volumes:       - ${DOCUMENT_ROOT-./www}:/var/www/html      - ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini      - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled      - ${LOG_DIR-./logs/apache2}:/var/log/apache2  mysql:    build:      context: "./bin/${DATABASE}"    container_name: '5.7-mysql'    restart: 'always'    ports:      - "${HOST_MACHINE_MYSQL_PORT}:3306"    volumes:       - ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql      - ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql    environment:      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}      MYSQL_DATABASE: ${MYSQL_DATABASE}      MYSQL_USER: ${MYSQL_USER}      MYSQL_PASSWORD: ${MYSQL_PASSWORD}  phpmyadmin:    image: phpmyadmin/phpmyadmin    container_name: 'sc-phpmyadmin'
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

当需要建立主机和容器化 Docker 数据库之间的连接时,您需要使用主机的环回 IP 地址 (127.0.0.1),在您的情况下,这将如下所示:


...

'host' => '127.0.0.1',

'port' => HOST_MACHINE_MYSQL_PORT

'username' => DOCKER_MYSQL_USERNAME,

'password' => DOCKER_MYSQL_PASSWORD,

'database' => DOCKER_MYSQL_DATABASE_NAME

...

HOST_MACHINE_MYSQL_PORT是主机上的端口,DB 服务从 Docker 容器指向该端口。


当您连接到在 Docker 容器内运行的 MySQL 服务器公开的端口时,应按预期建立连接。


localhost关于vs 的快速说明127.0.0.1:


localhost 是给机器本身的标准主机名,通常解析并映射到 127.0.0.1 地址。


127.0.0.1 地址是机器本身的地址,用于与最终用户使用的同一台机器或计算机建立 IP 连接。


查看完整回答
反对 回复 2023-05-26
?
动漫人物

TA贡献1815条经验 获得超10个赞

我用环境变量更改了 app.php,更改了数据库的用户名和密码。

我删除了 ./data/mysql 的数据重建容器但仍然是同样的错误我猜它与主机名有关

也尝试使用变量 PMA_HOST 但仍然没有成功。(本地主机也不起作用)

 'host' => env('PMA_HOST'),

如果我登录到 phpmyadmin,我可以毫无问题地创建我的表。

如果我登录到容器,我可以登录并进行查询

我看到套接字没有通过 grepping php 设置填充,

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

现在这已经填满了,但仍然没有继续 php 连接到 mysql(在蛋糕上,在我的数据库测试脚本中我有连接)。


查看完整回答
反对 回复 2023-05-26
  • 2 回答
  • 0 关注
  • 226 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信