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 required。
Docker-compose
默认情况下创建一个隔离网络,其中容器在堆栈启动时添加。在这个网络中,声明的服务名称(d8
,d8mysql
为您的情况)充当域名。因此容器可以通过该名称访问另一个容器。
我正在学习 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 required。
Docker-compose
默认情况下创建一个隔离网络,其中容器在堆栈启动时添加。在这个网络中,声明的服务名称(d8
,d8mysql
为您的情况)充当域名。因此容器可以通过该名称访问另一个容器。