Docker-Compose -无法使用命令--init-file初始化MySQL数据库

wgeznvg7  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(154)

我有一个想在容器中运行的应用程序,还有一个想在容器中运行的数据库。数据库部分是这样实现的。

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文件位于同一目录中。
我正在使用
command --init-file
配置以设置数据库。
当我运行docker-compose up时,它会失败,并出现以下错误:
2021-05-14T08:20:59.320203Z 0 [ERROR] mysqld:未找到文件“/favicon. ico”(错误代码:2 -没有这样的文件或目录)
我的命令文件指定正确吗?

cidc1ykv

cidc1ykv1#

正如大卫迷宫在评论中提到的,您必须将模式文件挂载到容器中。
那么这个命令--init只对容器中的文件系统有效吗?
是的
您还可以完全省略init命令,因为映像会自动将.sql转储加载到数据库中。从文档中:
[...]它将执行在/docker-entrypoint-initdb. d中找到的扩展名为.sh、.sql和.sql.gz的文件。[...]你可以很容易地填充你的mysql服务,通过挂载一个SQL转储到那个目录[...]。
就像这样:

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添加了一个卷,这样当您停止并删除容器时,数据将被持久化。

相关问题