Docker:链接到mysql容器的Drupal容器在Drupal安装期间无法连接到mysql

Vin*_*ace 2 mysql drupal docker

我对Docker来说还是新手,我刚刚通过CMS看看他们配置起来有多容易.到目前为止,Wordpress和Joomla退房了.

当我运行链接到mysql的drupal容器时,我进入drupal安装屏幕,并说它连接数据库,我使用我的root凭据和db host是'localhost',并收到尝试连接的错误.我附上了一张图片来显示输出结果.Drupal的配置-DB-输出误差

我得到的错误:

Failed to connect to your database server. The server reports the following message: SQLSTATE[HY000] [2002] No such file or directory.
Run Code Online (Sandbox Code Playgroud)

对此的任何帮助都会很棒.我试图看看我是否可以使用配置文件访问物理卷,但我无法使用Kitematic找到它们.

谢谢!

Mar*_*nor 7

以下docker compose文件将启动Drupal连接到另一个运行Mysql的容器

db:
  image: mysql
  environment:
    - MYSQL_ROOT_PASSWORD=letmein
    - MYSQL_DATABASE=drupal
    - MYSQL_USER=drupal
    - MYSQL_PASSWORD=drupal
  volumes:
    - /var/lib/mysql
web:
  image: drupal
  links:
    - db:mysql
  ports:
    - "8080:80"
  volumes:
    - /var/www/html/sites
    - /var/www/private
Run Code Online (Sandbox Code Playgroud)

请注意,drupal容器使用docker链接.这将创建一个名为"mysql"的/ etc/hosts条目.运行drupal安装屏幕时使用此代替"localhost".


注意

自最初起草此答案以来,docker撰写文件语法已更改.

这是更新的语法

version: '2'
services:
  mysql:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=letmein
      - MYSQL_DATABASE=drupal
      - MYSQL_USER=drupal
      - MYSQL_PASSWORD=drupal
    volumes:
      - /var/lib/mysql
  web:
    image: drupal
    depends_on:
      - mysql
    ports:
      - "8080:80"
    volumes:
      - /var/www/html/sites
      - /var/www/private
Run Code Online (Sandbox Code Playgroud)


小智 6

对我来说,技巧是在Drupal连接设置(settings.local.php)中添加数据库容器的服务名称,而不是“ localhost”或“ 127.0.0.1”,例如:

$databases['default']['default'] = array(
'database' => 'database-name',
'username' => 'root',
'password' => 'root',
'host' => 'database-container-name',
'port' => '3306',
'driver' => 'mysql',
'prefix' => '',
);
Run Code Online (Sandbox Code Playgroud)