Docker Drupal 环境的容器未链接

Docker containers for Drupal environment not linked

我正在学习 Docker 并通过安装 Drupal 进行试验。该过程是创建 2 个容器,其中一个 运行ning Apache 和另一个 运行ning MySQL.

我有以下 docker-compose.yml 文件:

version: '3'
services:
  d8:
    container_name: d8
    image: drupal
    build: .
    ports:
      - "8585:80"
    links: 
      - d8mysql:mysql
  d8mysql:
    container_name: d8mysql
    image: mysql
    restart: always
    environment: 
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: drupal
      MYSQL_USER: user
    ports:
      - "3306:3306"

还有这个Docker文件:

FROM drupal:latest
FROM mysql:latest

WORKDIR /var/www/html

当我运行docker-compose up时,我的两个容器都已成功创建,我可以登录并与它们交互。

问题是drupal站点没有连接到数据库。在设置过程中,我提供了 d8mysql 部分中标识的数据库名称、用户和密码。我确认数据库和用户在容器中 但是 drupal 无法连接。截图如下:

查看 d8 部分,我将 links 包含在 mysql 容器的参数中 - 我的 表示应该可以但没有。

我还检查了 Apache 容器的 /etc/hosts 文件,但它没有 MySQL 容器的条目,这显然应该在那里以方便所需的连接。

由于您没有为 mysql 图像定义标签,默认情况下使用 latest,暂时是 8.0.18.

Mysql 8 更改了其密码验证方法,这似乎会导致与 drupal 图像不兼容的问题。参见 github issue

一种选择是安装 mysql_native_password 插件,如针对上述 github 问题所建议的那样。不过我还没有测试过。

我验证它有效的其他选项 是为 mysql 图像使用较旧的 docker 标签,例如 mysql:5.7.28

工作docker-compose

version: '3'
services:
  d8:
    container_name: d8
    image: drupal
    ports:
      - "8585:80"
  d8mysql:
    container_name: d8mysql
    restart: always
    image: mysql:5.7.28
    environment: 
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: drupal
      MYSQL_USER: user
    # This is obsolete if you don't plan to connect to this db server from another machine outside docker network
    # ports:
    #   - "3306:3306"

备注:

  • 我没有使用你的Dockerfile,所以我删除了构建部分
  • 您的 Dockerfile 没有做任何特别的事情。当定义多个 FROM 指令时,只有后者有效。
  • 我删除了 link 部分,因为它是 not requiredDocker-compose 默认情况下创建一个隔离网络,其中容器在堆栈启动时添加。在这个网络中,声明的服务名称(d8d8mysql 为您的情况)充当域名。因此容器可以通过该名称访问另一个容器。