gpt4 book ai didi

【问题解决】容器部署MySQL的数据在dockercommit导出的镜像中丢失

转载 作者:我是一只小鸟 更新时间:2023-08-24 14:31:21 33 4
gpt4 key购买 nike

问题起因

最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上.

经过本人在Linux虚机中启动MySQL容器导入数据再 docker commit 出镜像部署到平台上,发现数据竟然没了,包括新导的库。。.

问题排查经过

经过docker inspect发现一个不寻常的点,一直没关注过的情况。可以注意到ContainerConfig下Volumes挂了个 {} 。

                        
                          docker inspect mysql:5.7.17 -f "{{json .ContainerConfig.Volumes}}"
{"/var/lib/mysql":{}}

                        
                      

这是什么意思呢?

意思是说在容器启动后,自动分配一块Volume挂载到容器中/var/lib/mysql挂载点上.

也就是说Volume不会在docker commit时保存到镜像中.

经过查看官方仓库中发现了在Dockerfile中使用了VOLUME这个命令.

问题解决

问题原因找到了,把数据目录变更成其他目录不就可以实现MySQL+数据合到一个镜像中了嘛! 。

这里以手头的mysql:5.7.17版本的官方MySQL镜像举例,其他版本的配置文件不一定和本例中位置相同,一般配置文件处于/etc/my.cnf、/etc/mysql/下.

主要的修改数据目录和迁移数据的命令:

                        
                          # 进入mysql容器
docker exec -it mysql bash
# 修改数据目录到/data/mysql,版本不同位置可能不同
sed -i "s#datadir.*/var/lib/mysql#datadir=/data/mysql#g" /etc/mysql/mysql.conf.d/mysqld.cnf
# 迁移数据目录
mkdir /data
cp -r /var/lib/mysql /data/
chown mysql:mysql /data -R
# 退出容器,重启容器使用新数据目录
exit
docker restart mysql
# 容器启动后,导入数据(省略步骤)
# 关闭myql容器以保存正常关闭状态
docker stop mysql
# 导出含数据的镜像
docker commit mysql mysql:v1

                        
                      

总结

简单记录一下导出带数据的MySQL镜像方式,踩到了Dockerfile的VOLUME指令的坑,简单分析了下该命令的作用。文中镜像带数据这只是为了临时使用,几乎不变更数据情况下使用,容器重启会导到增量数据丢失.

最后此篇关于【问题解决】容器部署MySQL的数据在dockercommit导出的镜像中丢失的文章就讲到这里了,如果你想了解更多关于【问题解决】容器部署MySQL的数据在dockercommit导出的镜像中丢失的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com