安装MySQL不再镜像的原因_MySQL Docker容器未将数据保存到新映像

我正在尝试创建一个预设有某种模式和种子数据的MySQL Docker容器,以便我可以将其他容器作为数据库连接到它.我使用trusted dockerfile/mysql image作为基础,我编写了一个Dockerfile来从该基础创建一个新图像并将我的schema.sql添加到其中.在构建该映像(MysqL:base)之后,我一直在尝试在新容器中运行bash,然后进入MysqL并创建我的数据库,然后导入模式.然后我退出容器并尝试将容器提交到新的Docker镜像.但是,生成的图像不会保留我对MysqL db所做的任何更改.它确实持有我在容器中写入的其他文件,但不包括数据库.

这是我用来构建初始图像的Dockerfile(myorg / MysqL:base).

FROM dockerfile/MysqL:latest

MAINTAINER (me)

ADD schema.sql /data/schema.sql

EXPOSE 3306

# Define working directory.

WORKDIR /data

CMD ["MysqLd_safe"]

建立之后,我进入图像:

docker run -i -t myorg/MysqL:base bash

并运行MysqL以导入架构:

myslqd_safe &

141218 00:15:56 MysqLd_safe Starting MysqLd daemon with databases from /var/lib/MysqL

MysqL -u root

MysqL> CREATE DATABASE mydb;

exit;

MysqL -u root -D mydb < schema.sql

我可以进入MysqL并验证架构是否已成功导入:

MysqL -u root -D mydb -e "SELECT * from tokens;"

另外,如果我进入/ var / lib / MysqL,我可以看到有一个mydb目录,其中包含与db对应的.frm文件.

但是当我退出并尝试将该容器提交到新图像时:

docker commit -m="import schema.sql" -a="Me" 72c2ff39dd65 myorg/MysqL:seed

然后进入新的形象:

docker run -i -t --rm myorg/MysqL:seed bash

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值