简体   繁体   English

Drupal 8 未连接到 Docker 中的 Mysql

[英]Drupal 8 is not connecting to Mysql in Docker

Directories structure of durpal 8: durpal 8 的目录结构:

.
├── docker-compose.yml
├── dump
│   └── drupal.sql
├── sessions
└── www
    └── core
    └── site
    └── modules
    └── vendor
    └── index.php

My settings.php database configuration我的settings.php数据库配置

$databases['default']['default'] = array (
'database' => 'drupal',
'username' => 'root',
'password' => 'test',
'prefix' => '',
'host' => '127.0.0.1',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);

My docker-compose.yml code我的 docker-compose.yml 代码

version: "2"
services:
www:
    image: drupal:8
    ports: 
        - "8001:80"
    volumes:
        - ./www:/var/www/html/
    depends_on:
        - db
    networks:
        - default
db:
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    ports: 
        - "3306:3306"
    environment:
        MYSQL_DATABASE: drupal
        MYSQL_USER: user
        MYSQL_PASSWORD: test
        MYSQL_ROOT_PASSWORD: test
    volumes:
        - ./dump:/docker-entrypoint-initdb.d
        - /var/lib/mysql
    networks:
        - default
phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links: 
        - db:db
    ports:
        - 8000:80
    environment:
        PMA_HOST: db
        MYSQL_USER: user
        MYSQL_PASSWORD: test
        MYSQL_ROOT_PASSWORD: test

Using above code I am able to connect phpmyadmin to mysql and its working fine but I am not able to connect Drupal to mysql and getting below error:使用上面的代码,我可以将 phpmyadmin 连接到 mysql 并且它工作正常,但我无法将 Drupal 连接到 mysql 并出现以下错误:

PDOException: SQLSTATE[HY000] [2002] Connection refused in /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php on line 79 #0 /var/www/html/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php(420): PDO->__construct('mysql:host=127....', 'root', 'test', Array)\\n#1 /var/www/html/core/lib/Drupal/Core/Database/Database.php(371): Drupal\\Core\\Database\\Driver\\mysql\\Connection::open(Array)\\n#2 /var/www/html/core/lib/Drupal/Core/Database/Database.php(166): Drupal\\Core\\Database\\Database::openConnection('default', 'default')\\n#3 [internal function]: Drupal\\Core\\Database\\Database::getConnection('default')\\n#4 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79): call_user_func_array('Drupal\\\\Core\\\\Dat...', Array)\\n#5 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->createService(Array, 'database')\\n#6 /var/www/html/core/lib/Drupal/Component/Depe PDOException: SQLSTATE[HY000] [2002] 第 79 行 #0 /var/www/html/core/lib/Drupal/ 上的 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php 中的连接被拒绝核心/数据库/驱动程序/mysql/Connection.php(420): PDO->__construct('mysql:host=127....', 'root', 'test', Array)\\n#1 /var/www /html/core/lib/Drupal/Core/Database/Database.php(371): Drupal\\Core\\Database\\Driver\\mysql\\Connection::open(Array)\\n#2 /var/www/html/core/ lib/Drupal/Core/Database/Database.php(166): Drupal\\Core\\Database\\Database::openConnection('default', 'default')\\n#3 [内部函数]: Drupal\\Core\\Database\\Database ::getConnection('default')\\n#4 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79): call_user_func_array('Drupal\\\\Core\\\\Dat...' , Array)\\n#5 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->createService(Array, 'database')\\n #6 /var/www/html/core/lib/Drupal/Component/Depe ndencyInjection/PhpArrayContainer.php(260): Drupal\\Component\\DependencyInjection\\Container->get('database', 1)\\n#7 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(62): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->resolveServicesAndParameters(Array)\\n#8 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->createService(Array, 'cache.container')\\n#9 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(515): Drupal\\Component\\DependencyInjection\\Container->get('cache.container')\\n#10 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(876): Drupal\\Core\\DrupalKernel->getCachedContainerDefinition()\\n#11 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(468): Drupal\\Core\\DrupalKernel->initializeContainer()\\n#12 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(664): Drupal\\Core\\DrupalKernel->boot()\\n#13 /var/www/html/index.php(19): Drupal\\Core\\DrupalKernel->handle ndencyInjection/PhpArrayContainer.php(260): Drupal\\Component\\DependencyInjection\\Container->get('database', 1)\\n#7 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php (62): Drupal\\Component\\DependencyInjection\\PhpArrayContainer->resolveServicesAndParameters(Array)\\n#8 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\\Component\\DependencyInjection \\PhpArrayContainer->createService(Array, 'cache.container')\\n#9 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(515): Drupal\\Component\\DependencyInjection\\Container->get ('cache.container')\\n#10 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(876): Drupal\\Core\\DrupalKernel->getCachedContainerDefinition()\\n#11 /var/ www/html/core/lib/Drupal/Core/DrupalKernel.php(468): Drupal\\Core\\DrupalKernel->initializeContainer()\\n#12 /var/www/html/core/lib/Drupal/Core/DrupalKernel。 php(664): Drupal\\Core\\DrupalKernel->boot()\\n#13 /var/www/html/index.php(19): Drupal\\Core\\DrupalKernel->handle (Object(Symfony\\Component\\HttpFoundation\\Request))\\n#14 {main} (对象(Symfony\\Component\\HttpFoundation\\Request))\\n#14 {main}

I guess you should point your database connections to the hostname you created in docker-compose file.我想您应该将数据库连接指向您在 docker-compose 文件中创建的主机名。 Can't be a localhost address as you registered:不能是您注册时的本地主机地址:

$databases['default']['default'] = array (
'database' => 'drupal',
'username' => 'root',
'password' => 'test',
'prefix' => '',
'host' => 'db', #here you point to the container's service name
'port' => '3306', 
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);

Replace loca ip address替换本地ip地址

'host' => '127.0.0.1',

by service docker name按服务码头工人名称

'host' => 'db',

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM