问题重现:
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
重启容器,然后导入数据,然后将容器打包成镜像,然后再启动镜像,发现镜像中的数据有我们之前导入的数据。