【发布时间】:2021-05-17 20:06:41
【问题描述】:
我正在使用 mysql/mysql-server 映像在 docker 中创建一个 mysql 服务器。因为我想自动设置我的数据库(添加用户、创建表),所以我创建了一个 SQL 文件来为我做这件事。为了自动运行该脚本,我用这个 dockerfile 扩展了图像:
FROM mysql/mysql-server:latest
RUN mkdir /scripts
WORKDIR /scripts
COPY ./db_setup.sql .
RUN mysql -u root -p password < cat db_setup.sql
但由于某种原因,会发生这种情况:
/bin/sh: cat: No such file or directory
ERROR: Service 'db' failed to build : The command '/bin/sh -c mysql -u root -p password < cat db_setup.sql' returned a non-zero code: 1
我该如何解决这个问题?
【问题讨论】:
-
<重定向操作将文件名作为参数,而不是命令。即使不使用 docker,您也无法进行上述重定向。所以认为这是一个码头问题是一个红鲱鱼。 -
在任何情况下都不能
RUN mysql,因为数据库服务器不会在docker build阶段运行。您是否正在寻找类似/docker-entrypoint-initdb.d安装脚本目录的内容? -
@DavidMaze 我知道...我使用 CMD 修复了它,但我知道这不是最好的解决方案。你能提供你的解决方案吗?
-
How can I initialize a MySQL database with schema in a Docker container? 的答案(但不是公认的答案)很好地描述了设置。当数据库容器第一次启动时,该目录中的任何内容都将通过
mysql执行,如果它是*.sql文件。 -
我更新了我的答案,在这些 cmets 中加入了很好的信息,这些信息解决了如何为 mysql 映像运行初始化脚本,而不仅仅是提到原始
cat: No such file or directory错误的来源。