我正在尝试在 MySQL 容器启动时创建多个数据库。根据 https://github.com/docker-library/mysql/pull/18 ,我可以在镜像的 /docker-entrypoint-initdb.d
中挂载或复制我的脚本,它们将在启动时自动执行。
但是我的脚本根本没有执行。似乎 docker-entrypoint.sh
没有看到 /docker-entrypoint-initdb.d
目录中的文件。
这是我的 Dockerfile:
FROM mysql
ADD script.sql /docker-entrypoint-initdb.d/script.sql
RUN chmod -R 775 /docker-entrypoint-initdb.d
ENV MYSQL_ROOT_PASSWORD mypass
这是我的 script.sql
:
CREATE DATABASE mydb;
CREATE DATABASE mydb2;
我构建并运行容器:
$ docker build -t mysql .
$ docker run -v data_volume:/var/lib/mysql --name somedb -d mysql
当我在 tty 中访问容器时,我可以看到 script.sql
在 /docker-entrypoint-initdb.d
但未执行。
我已经看到 docker logs -f somedb
输出但没有错误。
我用 .sh
文件试过,我也用 Maria-db 试过,结果是一样的。
可能是什么问题呢?
原文由 Canis Majoris 发布,翻译遵循 CC BY-SA 4.0 许可协议
您应该在运行容器之前清除
data_volume
并且将执行 sql 文件。 此卷data_volume
可以使用以下命令删除:docker volume rm data_volume
。您的问题的根本原因可以在
docker-entrypoint.sh
中找到。当您运行 mysql 容器时,它会检查 mysql 目录/var/lib/mysql
存在。如果该目录不存在(第一次运行),它将运行您的 SQL 文件。您可以在 Dockerfile 源 获得更多详细信息