gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:03:04 25 4
gpt4 key购买 nike

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

  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 [错误] mysqld:找不到文件“/SCHEMA.sql”(错误代码:2 - 没有这样的文件或目录)
我的命令文件是否正确指定?

最佳答案

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

so does this command --init work only on the file system within the container?


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

[...] it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. [...] You can easily populate your mysql services by mounting a SQL dump into that directory [...].


像这样:
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 添加了一个卷这样当你关闭容器时,数据会被持久化。

关于mysql - Docker-Compose - 无法使用命令 --init-file 初始化 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67531435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com