问题描述
我有以下 docker compose 文件。 MysqL 和 PHPmyadmin 正在运行,但 Directus 无法初始化,因为它无法连接到数据库。
version : '3'
services:
db:
image: MysqL:8
container_name: dev_MysqL
environment:
MysqL_USER: directus
MysqL_PASSWORD: pa55word
MysqL_ROOT_PASSWORD: pa55word
MysqL_DATABASE: directus
volumes:
- ./db_data:/var/lib/MysqL
ports:
- 9000:3306
PHPmyadmin:
image: PHPmyadmin/PHPmyadmin
container_name: dev_pma
links:
- db
depends_on:
- db
environment:
PMA_HOST: db
PMA_PORT: 3306
MysqL_ROOT_PASSWORD: pa55word
restart: always
ports:
- 8080:80
directus:
container_name: directus
image: directus/directus:v9.0.0-rc.59
ports:
- 8055:8055
links:
- db
depends_on:
- db
environment:
KEY: '255d861b-5ea1-5996-9aa3-922530ec40b1'
SECRET: '6116487b-cda1-52c2-b5b5-c8022c45e263'
DB_CLIENT: 'MysqL'
DB_HOST: 'db'
DB_PORT: '3306'
DB_DATABASE: 'directus'
DB_USER: 'directus'
DB_PASSWORD: 'pa55word'
ADMIN_EMAIL: 'admin@directus.com'
ADMIN_PASSWORD: 'pa55word'
我收到的 docker compose 日志消息是
正在启动 dev_MysqL ... 完成
正在启动 dev_pma ... 完成
重新创建directus ...完成
附加到dev_MysqL、dev_pma、directus
dev_MysqL | 2021-04-17 08:39:14+00:00 [注意] [入口点]:MysqL Server 8.0.23-1debian10 的入口点脚本已启动。
dev_MysqL | 2021-04-17 08:39:14+00:00 [注意] [入口点]:切换到专用用户“MysqL”
dev_pma | AH00558: apache2: 无法可靠地确定服务器的完全限定域名,使用 172.21.0.3。全局设置“ServerName”指令以抑制此消息
dev_pma | AH00558: apache2: 无法可靠地确定服务器的完全限定域名,使用 172.21.0.3。全局设置“ServerName”指令以抑制此消息
dev_pma | [Sat Apr 17 08:39:15.199501 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.16 配置——恢复正常操作
dev_pma | [Sat Apr 17 08:39:15.199574 2021] [core:notice] [pid 1] AH00094:命令行:'apache2 -D FOREGROUND'
dev_MysqL | 2021-04-17 08:39:14+00:00 [注意] [入口点]:MysqL Server 8.0.23-1debian10 的入口点脚本已启动。
dev_MysqL | 2021-04-17T08:39:15.116541Z 0 [系统] [MY-010116] [服务器] /usr/sbin/MysqLd (MysqLd 8.0.23) 作为进程 1 启动
dev_MysqL | 2021-04-17T08:39:15.122954Z 0 [警告] [MY-010159] [服务器] 设置 lower_case_table_names=2 因为 /var/lib/MysqL/ 的文件系统不区分大小写
dev_MysqL | 2021-04-17T08:39:15.138364Z 1 [系统] [MY-013576] [InnoDB] InnoDB 初始化已经开始。
目录 | 08:39:15 ✨ 初始化引导程序...
dev_MysqL | 2021-04-17T08:39:16.230177Z 1 [系统] [MY-013577] [InnoDB] InnoDB 初始化已结束。
dev_MysqL | 2021-04-17T08:39:16.390962Z 0 [系统] [MY-011323] [服务器] X 插件准备好连接。绑定地址:'::'端口:33060,套接字:/var/run/MysqLd/MysqLx.sock
dev_MysqL | 2021-04-17T08:39:16.419710Z 0 [系统] [MY-010229] [服务器] 正在启动 XA 崩溃恢复...
dev_MysqL | 2021-04-17T08:39:16.426595Z 0 [系统] [MY-010232] [服务器] XA 崩溃恢复完成。
dev_MysqL | 2021-04-17T08:39:16.527057Z 0 [警告] [MY-010068] [服务器] CA 证书 ca.pem 是自签名的。
dev_MysqL | 2021-04-17T08:39:16.528010Z 0 [系统] [MY-013602] [服务器] 通道 MysqL_main 配置为支持 TLS。此频道现在支持加密连接。
dev_MysqL | 2021-04-17T08:39:16.539042Z 0 [警告] [MY-011810] [服务器] --pid-file 的不安全配置:所有操作系统用户都可以访问路径中的位置“/var/run/MysqLd”。考虑选择其他目录。
dev_MysqL | 2021-04-17T08:39:16.586905Z 0 [系统] [MY-010931] [服务器] /usr/sbin/MysqLd:准备好连接。版本:'8.0.23' 套接字:'/var/run/MysqLd/MysqLd.sock' 端口:3306 MysqL 社区服务器 - GPL。
目录 | 08:39:40�无法连接到数据库
谁能帮忙看看?谢谢。
解决方法
默认情况下,docker-compose 将创建一个网络,其中容器主机名基于其名称。通常容器名称是根据 docker-compose.yml
中的服务名称生成的。在您的情况下,您可以为服务容器指定自己的名称。
尝试将 DB_HOST: 'db'
更改为
directus:
...
environment:
DB_HOST: 'dev_mysql'
https://docs.docker.com/compose/networking/
此外,links
指令已被弃用,因此您应该将其删除。无论如何,您的文件中都没有必要这样做,因为您的 docker-compose.yml
中的所有服务都将拥有自己的专用网络。
https://docs.docker.com/compose/compose-file/compose-file-v3/#links