docker中的Directus无法连接docker中的mysql数据库

问题描述

我有以下 docker compose 文件MysqLPHPmyadmin 正在运行,但 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�无法连接到数据库

directus 以代码 1 退出

谁能帮忙看看?谢谢。

解决方法

默认情况下,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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...