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

时间:2015-10-29 19:01:35

标签: mysql drupal docker

我对docker相当新,我刚刚浏览了CMS,看看他们配置起来有多容易。到目前为止,Wordpress和Joomla退房了。

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

我得到的错误:

Failed to connect to your database server. The server reports the following message: SQLSTATE[HY000] [2002] No such file or directory.

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

谢谢!

2 个答案:

答案 0 :(得分: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

请注意,drupal容器使用docker links。这将创建一个名为“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

答案 1 :(得分: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' => '',
);