Docker 无法连接到 cake php

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.1

version: "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'




一只萌萌小番薯
浏览 227回答 2
2回答

米脂

当需要建立主机和容器化 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 连接。

动漫人物

我用环境变量更改了 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(在蛋糕上,在我的数据库测试脚本中我有连接)。
打开App,查看更多内容
随时随地看视频慕课网APP