【发布时间】:2019-05-31 11:48:11
【问题描述】:
我需要创建一个包含大型数据库的 Docker 映像。可以使用指定文件夹中的脚本populate_net_db.sh 填充数据库。我需要创建一个在构建时完成此操作的 Docker 映像,以便使用数据库的开发人员可以创建一个容器,而无需等待很长时间才能填充数据库。
我做了什么(这有效,但不是我需要的):
我可以在运行时创建数据库并使用 mysql Docker 映像填充它,并将所需文件放入
docker-entrypoint-initdb.d文件夹。当您运行映像时,这将需要大量时间来进行设置,但可以根据需要进行设置,并且我可以完全按照需要使用docker exec -it "image_name" mysql -u root -p访问数据库。我可以在构建时使用 RUN 命令创建相同的数据库,并查看表在构建时设置是否正确,但是,当我运行这样的图像时,会设置一个新的 mysql 数据库,并且数据库来自构建没了。
有没有办法让构建时数据库显示在docker exec -it "image_name" mysql -u root -p 中?
【问题讨论】:
-
简短回答:因为 MySQL 基础镜像对其数据目录使用
VOLUME声明,所以您以后无法构建包含任何内容的镜像;它在VOLUME运行时永远停留在(空)内容上。 -
在 another question 上,我曾建议使用
docker run -v将 MySQL 数据保存在主机目录中并共享该目录的 tar 文件。