【发布时间】:2017-08-08 19:29:47
【问题描述】:
我想使用官方mysql docker image 来创建一个带有初始化数据库和导入转储文件的新图像。默认命令是mysqld,所以我想知道如何实现这一点。
有没有办法只初始化数据库并导入转储,而不启动 mysql 守护进程?
【问题讨论】:
我想使用官方mysql docker image 来创建一个带有初始化数据库和导入转储文件的新图像。默认命令是mysqld,所以我想知道如何实现这一点。
有没有办法只初始化数据库并导入转储,而不启动 mysql 守护进程?
【问题讨论】:
MySQL docker 镜像会在首次启动时自动解析来自/docker-entrypoint-initdb.d 目录的.sh .sql 和.sql.gz。文件将按字母顺序执行。
将现有数据库转储到文件中,然后编辑 Dockerfile 以添加:
ADD mysqldump.sql /docker-entrypoint-initdb.d/mysqldump.sql
第一次启动时,mysqldump.sql 将被导入。
【讨论】:
一个选项是访问 docker 容器的 bash shell(请参阅 https://hub.docker.com/_/mysql/ 中的“容器 shell 访问和查看 MySQL 日志”部分),导入您的转储文件(您可以使用 docker cp 复制转储文件从您的主机系统到 docker 容器),完成后,您可以使用docker commit 命令从当前运行的容器创建一个新的 docker 映像。之后您可以使用新创建的图像。
希望这会有所帮助。
【讨论】:
我刚刚找到了mysql:5.7 的解决方案。我在构建过程中执行了稍微修改的entrypoint.sh:
COPY ./docker-entrypoint.sh /
RUN /docker-entrypoint.sh mysqld
在docker-entrypoint.sh我删除了最后一行:
exec "$@
它看起来很丑,但到目前为止还有效。
【讨论】: