Oli*_*ins 5 mysql docker docker-compose
我有一个要在容器中运行的应用程序,以及一个要在容器中运行的数据库。我已经像这样实现了数据库部分。
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
Run Code Online (Sandbox Code Playgroud)
我的数据库的初始架构位于一个名为SCHEMA.sql的文件中,该文件与我的docker-compose文件位于同一目录中。
我正在使用
命令--init-文件
配置来设置数据库。
当我运行docker-compose up时,它失败并出现以下错误:
2021-05-14T08:20:59.320203Z 0 [错误] mysqld:找不到文件“/SCHEMA.sql”(错误代码:2 - 没有这样的文件或目录)
我的命令文件指定正确吗?
正如 David Maze 在评论中提到的,您必须将架构文件挂载到容器中。
那么这个命令 --init 只适用于容器内的文件系统吗?
是的。
您还可以完全省略 init 命令,因为映像会自动将.sql转储加载到数据库中。来自文档:
[...] 它将执行在 /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:
Run Code Online (Sandbox Code Playgroud)
我还添加了一个卷,/var/lib/mysql以便当您停止并删除容器时,数据会被保留。
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |