Drupal 8未连接到Docker中的Mysql

Drupal 8未连接到Docker中的Mysql,mysql,docker,drupal,docker-compose,drupal-8,Mysql,Docker,Drupal,Docker Compose,Drupal 8,durpal 8的目录结构: . ├── docker-compose.yml ├── dump │   └── drupal.sql ├── sessions └── www └── core └── site └── modules └── vendor └── index.php My settings.php数据库配置 $databases['default']['default'] = array ( 'database' => 'dru

durpal 8的目录结构:

.
├── docker-compose.yml
├── dump
│   └── drupal.sql
├── sessions
└── www
    └── core
    └── site
    └── modules
    └── vendor
    └── index.php
My 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',
);
我的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
使用上面的代码,我能够将phpmyadmin连接到mysql,并且工作正常,但是我无法将Drupal连接到mysql,并且出现以下错误:

PDOException:79#0/var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php第79行的/var/www/html/core/lib/Drupal/core/Database/Driver/mysql/Connection.php(420):PDO->u构造('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',')\n#3[内部函数]:Drupal\core\Database\Database\Database::getConnection('default'))\n#4/var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79):调用用户函数数组('Drupal\\core\\Dat…',数组)\n#5/var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171):Drupal\Component\DependencyInjection\PhpArrayContainer->createService(数组,'database')\n#6/var/www/html/core/lib/Drupal/Component/DependencyInjection/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->resolvservices和parameters(数组)\n#8/var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171):Drupal\Component\DependencyInjection\PhpArrayContainer->createService(数组,'cache.Container')\n#9/var/www/html/core/lib/Drupal/core/Drupal/core/DrupalKernel.php(515):Drupal\Component\DependencyInjection\Container->->->获取('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\DrupalKernel->initializeContainer()\n#12/var/www/html/core/lib/Drupal/DrupalKernel/core->boot())\n#13/var/www/html/index.php(19):Drupal\Core\DrupalKernel->handle(对象(Symfony\Component\HttpFoundation\Request))\n#14{main}


我想您应该将数据库连接指向在docker compose文件中创建的主机名。注册时不能是本地主机地址:

$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',
);

替换loca ip地址

'host' => '127.0.0.1',
按服务docker名称

'host' => 'db',

谢谢Danieland,我尝试了所有其他方法,但一次就成功了。如果我没有在docker compose文件中定义
phpmyadmin:
部分,情况会怎样。我也面临同样的问题,如果我没有在docker compose文件中定义phpmyadmin:节,情况会怎样。我也面临同样的问题