问题重现:

q: 建立表并存有数据的mysql container通过docker commit的方式生成的镜像,然后利用镜像创建容器,能正常连接,但里面没有之前的数据

问题解释:

mysql数据库中的数据默认是存放在/var/lib/mysql目录下的,而mysql容器通常是将容器内的/var/lib/mysql作为volume挂载,当你使用commit命令把容器打包成镜像时,commit操作并不会包含容器内挂载的volume中的数据变化,所以会发现数据都不在了。

问题解决:

mysql镜像的数据默认都在/var/lib/mysql目录下,我们修改默认的数据库的数据位置就行,不要放在/var/lib/mysql下面

在根目录下创建work目录

mkdir /work

然后复制/var/lib/mysql下的数据到/work下

cp -r /var/lib/mysql /work

修改数据库配置文件

vim /etc/mysql.conf.d/mysqld.cnf

修改 [mysqld]

下的datadir目录

将数据修改为刚才创建的目录

datadir = /work/mysql

重启容器,然后导入数据,然后将容器打包成镜像,然后再启动镜像,发现镜像中的数据有我们之前导入的数据。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐