mysql - Drupal 环境的 Docker 容器未链接

标签 mysql docker containers drupal-8

我正在学习 Docker 并通过安装 Drupal 进行实验。该过程是创建 2 个容器,其中一个运行 Apache,另一个运行 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"

还有这个Dockerfile:

FROM drupal:latest
FROM mysql:latest

WORKDIR /var/www/html

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

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

enter image description here

查看d8部分,我包含了带有mysql容器参数的链接 - 这是我的research表示应该可以解决问题,但没有。

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

最佳答案

由于您尚未为mysql定义标签,因此默认使用latest,暂时为8.0.18

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

一种选择是按照上述 github 问题的建议安装 mysql_native_password 插件。不过我还没有测试过。

我已验证其有效的其他选项是对 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指令时,只有后者有效。
  • 我删除了链接部分,因为它是 not required 。 Docker-compose 默认情况下会创建一个隔离网络,在堆栈启动时将容器添加到其中。在此网络中,声明的服务名称(对于您的情况,d8d8mysql)充当域名。因此一个容器可以通过该名称访问另一个容器。

关于mysql - Drupal 环境的 Docker 容器未链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392169/

相关文章:

mysql - 我们是否使用非 TEXT 列使数据库表变得复杂?

php - 我正在尝试使用 mysqli 查询我的 mysql 数据库,但是出现内存错误

docker - 在Jenkins服务器中调试Docker构建

flutter - 有一个适合上下文 flutter 大小的容器吗?

c++ - 如何固定输出 C++、STL 中文本的位置

php - 如何在 laravel 中使用模型调用参数化存储过程

java - 在多线程环境中选择后更新表

java - Docker Compose OpenJDK - 卷映射不起作用

docker - 在容器中运行应用的情况下,从主机上打开/编辑/保存

kubernetes - Kubernetes 中的 ClusterIP、NodePort 和 LoadBalancer 服务类型有什么区别?