【问题标题】:Docker : Drupal container linked to mysql container can't connect to mysql during Drupal installationDocker:链接到 mysql 容器的 Drupal 容器在 Drupal 安装期间无法连接到 mysql
【发布时间】:2015-10-29 19:01:34
【问题描述】:

我对 docker 还很陌生,我刚刚浏览了 CMS,看看它们的配置有多容易。到目前为止,Wordpress 和 Joomla 都在检查。

当我运行链接到 mysql 的 drupal 容器时,我进入了 drupal 安装屏幕,它显示连接数据库,我使用我的根凭据和数据库主机是“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 找到它们。

谢谢!

【问题讨论】:

    标签: mysql drupal docker


    【解决方案1】:

    对我来说,诀窍是在 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' => '',
    );
    

    【讨论】:

    • 这对我有用!不过,我很好奇只是在docker-compose.yml 中添加links 没有帮助!!
    • @RishiKulshreshtha 它的贬值了docs.docker.com/network/links
    • 非常感谢。 2小时后这对我有用^_^
    【解决方案2】:

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

    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 compose 文件语法已更改。

    这里是更新的语法

    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
    

    【讨论】:

    • 谢谢你,Mark,撰写文件是管理 docker 内容的必经之路。我现在唯一坚持的是如何设置本地drupal内容以挂载/链接到docker compose文件。所以我可以开发并查看 docker VM 上的输出
    • @VincentSpace compose 文件中列出的 docker 卷可以很容易地映射到 dev 空间中的本地目录。检查撰写文件语法。
    • @Superbyte 你能更具体一点吗?这是一个旧答案,使用版本 1 语法的 compose 文件,但我使用 docker-compose 版本 1.14.0 对其进行了测试,它仍然有效。
    • @MarkO'Connor 感谢您的回复。我的问题已经在大约 3 小时前解决了 :)
    • 你知道如何在 docker-compose 版本 2 中做到这一点吗?如果是这样,如果您能更新答案,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 2016-07-22
    • 1970-01-01
    • 2020-12-30
    • 2020-07-29
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多