2017-10-13 96 views
0

我读过最近的帖子Setting up MySQL and importing dump within Dockerfile,但找不到答案。Docker的mysql问题

我想要的是建立与创建的数据库,用户和一些其他数据的自定义MySQL映像。这里是我的Dockerfile(简体):

FROM mysql:5.7 

    ENV MYSQL_ROOT_PASSWORD=root 

    RUN service mysql start && \ 
     mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "CREATE DATABASE mydb;" && \ 
     mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "SHOW databases;" && \ 
     service mysql stop 

ENTRYPOINT service mysql start && /bin/sh 

图像被成功建成并mydb的数据库被列为“SHOW数据库”的输出。 但是,当我运行容器基于这个图像我看到根密码是空的,并且mydb数据库丢失。

我该如何解决这个问题?谢谢?

回答

0

您可以使用init脚本。它更容易然后乳宁和停止MySQL来运行命令

初始化一个新的实例

当容器启动的第一次,具有 一个新的数据库指定的名称将被创建和使用提供的 配置变量进行初始化。此外,它将执行 扩展名为.sh,.sql和.sql.gz的文件,这些文件位于 /docker-entrypoint-initdb.d中。文件将按字母顺序执行 。您可以通过将SQL 转储装入该目录并使用贡献的 数据提供自定义映像,从而轻松填充您的mysql服务。 SQL文件将默认导入到由MYSQL_DATABASE变量指定的数据库 。

+0

谢谢,谢尔盖。我会尝试。但是为什么我在RUN指令中创建的数据库丢失了?这是否意味着在第一个容器运行之前初始化与数据库相关的数据是没有意义的? – Sergey

+0

这是个好问题。你能告诉我'Dockerfile'你在哪里使用该基础图像? –

+0

Sergey,我在问题描述中指定了Docker文件内容 – Sergey