MySQL Docker容器未将数据保存到新映像
我正在尝试创建一个预设有某种模式和种子数据的MySQL Docker容器,以便我可以将其他容器作为数据库连接到它.我使用trusted dockerfile/mysql image作为基础,我编写了一个Dockerfile来从该基础创建一个新图像并将我的schema.sql添加到其中.在构建该映像(mysql:base)之后,我一直在尝试在新容器中运行bash,然后进入mysql并创建我的数据库,然后导入模式.然后我退出容器并尝试将容器提交到新的Docker镜像.但是,生成的图像不会保留我对MySQL db所做的任何更改.它确实持有我在容器中写入的其他文件,但不包括数据库. 这是我用来构建初始图像的Dockerfile(myorg / mysql:base).
建立之后,我进入图像:
并运行MySQL以导入架构:
我可以进入mysql并验证架构是否已成功导入:
另外,如果我进入/ var / lib / mysql,我可以看到有一个mydb目录,其中包含与db对应的.frm文件. 但是当我退出并尝试将该容器提交到新图像时:
然后进入新的形象:
db文件不再位于/ var / lib / mysql中,并且运行mysql -u root -e“SHOW DATABASES”不显示mydb数据库,只显示默认的mysql,information_schema和performance_schema dbs.我发现如果我在容器中创建了一个新的文本文件(echo’test’> newfile),那么该文件将出现在已提交的映像中,而不是db中. 我想知道这是否与可信图像Dockerfile具有VOLUME [“/ etc / mysql”,“/ var / lib / mysql”]这一事实有关,因此它将db目录作为卷安装.我的Dockerfile没有这个命令,但我不知道它是否继承了(我真的不明白卷如何运行得足以知道这可能会如何影响我的构建).我不需要将db作为卷安装,因为我需要另一个容器通过网络连接连接到它(我将使用docker链接). FWIW,我在OS X 10.9.5上运行boot2docker 1.3.2. 作为另一个答案,您已声明无法提交卷,子容器实际上从父级继承卷定义.因此,对卷的任何更改都将被丢弃.我想添加诸如mysql数据库文件之类的数据应该总是存在于卷中有几个原因,你不应该尝试将它提交到你的图像中.
>如果必须迁移容器,则没有简单的方法从容器中提取数据(如果它不在卷中). 那你该怎么做呢? >使用可以与服务容器的任何实例链接的仅数据容器.然后,您可以使用volumes-from将数据导入服务容器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |