【问题标题】:Docker-Compose - cannot intialize MySQL database with command --init-fileDocker-Compose - 无法使用命令--init-file 初始化 MySQL 数据库
【发布时间】:2021-05-14 08:40:36
【问题描述】:

我有一个想要在容器中运行的应用程序,以及一个想要在容器中运行的数据库。我已经像这样实现了数据库部分。

  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    command: --init-file /SCHEMA.sql
    restart: always
    environment:
      MYSQL_DATABASE: shapeshop
      MYSQL_USER: admin
      MYSQL_PASSWORD: admin
      MYSQL_ROOT_PASSWORD: root
    networks:
      - backend

我的数据库的初始架构位于一个名为 SCHEMA.sql 的文件中,该文件与我的 docker-compose 文件位于同一目录中。

我正在使用

命令--init-file

设置数据库的配置。

当我运行 docker-compose up 时,它会因以下错误而失败:

2021-05-14T08:20:59.320203Z 0 [错误] mysqld:找不到文件“/SCHEMA.sql”(错误代码:2 - 没有这样的文件或目录)

我的命令文件指定正确吗?

【问题讨论】:

  • 没有volumes:将host文件映射到容器中,数据库启动是看不到的。您通常会将 SQL 文件挂载到 /docker-entrypoint-initdb.d/ 中,标准的 mysql 映像启动将为您执行它(仅在容器第一次启动时)。
  • 那么这个命令 --init 是否只在容器内的文件系统上工作?我对文档有点困惑。
  • 我本打算今天翻阅文档,以获得此类问题的答案.....

标签: mysql docker docker-compose


【解决方案1】:

正如 David Maze 在 cmets 中提到的,您必须将架构文件挂载到容器中。

那么这个命令 --init 是否只对容器内的文件系统有效?

是的。

您也可以完全省略 init 命令,因为映像会自动将 .sql 转储加载到数据库中。 From the docs:

[...] 它将执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .sh、.sql 和 .sql.gz 的文件。 [...]您可以通过将 SQL 转储安装到该目录来轻松填充您的 mysql 服务 [...]。

像这样:

services:
  db:
    image: mysql:5.7
    # If you want to use a custom command, do it like this:
    # command: ["mysqld","--innodb-buffer-pool-size=2G"]
    volumes:
      # Persist data
      - "db_data:/var/lib/mysql"
      # Mount the schema file
      - "./SCHEMA.sql:/docker-entrypoint-initdb.d/SCHEMA.sql"
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: shapeshop
      MYSQL_USER: admin
      MYSQL_PASSWORD: admin
      MYSQL_ROOT_PASSWORD: root
    networks:
      - backend
    restart: always

volumes:
  db_data:

我还为/var/lib/mysql 添加了一个卷,这样当您关闭容器时,数据会保留下来。

【讨论】:

  • 这个答案很完美。多年来,我已经在许多环境中做到了这一点,并且它的行为与描述的完全一样。非常彻底的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
相关资源
最近更新 更多