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

这篇具有很好参考价值的文章主要介绍了【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题起因

最近公司有个甲方项目参加竞赛,要求在(基于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的数据在docker commit导出的镜像中丢失,问题解决,# Docker,mysql,docker,数据库

问题解决

问题原因找到了,把数据目录变更成其他目录不就可以实现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指令的坑,简单分析了下该命令的作用。文中镜像带数据这只是为了临时使用,几乎不变更数据情况下使用,容器重启会导到增量数据丢失。文章来源地址https://www.toymoban.com/news/detail-679269.html

到了这里,关于【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 工具系列(九) 本文(2万字) | 在ubuntu中安装docker教程 | 在Linux下Docker将镜像导出 | 上传至服务器 | 部署并创建容器 |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程

    2024年01月19日
    浏览(81)
  • Docker安装Nginx并部署&MySQL容器构建

    将配置文件上传到conf文件夹(数据库配置文件已放到置顶资源中) /soft/mysql/conf/my.cnf:/etc/my.cnf目录为我们配置绑定的目录 /soft/mysql/data:/var/lib/mysql 是将data目录与MySQL目录进行绑定 进入到我们的MySQL容器中(m1为容器名)  进入容器后登录到MySQL 输入密码后进入到MySQL赋予权限 

    2024年01月19日
    浏览(58)
  • Docker容器化部署报Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.user‘ doesn‘t exis的解决办法

    关于这个,博主是在迁移数据库的时候遇到的, 为了紧贴单位的发展战略及发展文化方针,给单位培养人才,先大胆的让同事先尝试着操作,最后出现问题了,博主就出场了, 查看事件内容提示: “  Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.user‘ doesn‘t exis ”

    2023年04月08日
    浏览(46)
  • Docker部署容器与主机时间不一致问题

    Docker部署容器与主机时间不一致问题 使用docker容器部署的应用,会出现时间与主机不一致的情况。有两种情况:一是容器内时间与主机时间不一致,二是容器与主机时间不一致,差距为 8 小时; 简单解决问题方案: 容器时间与主机差8个小时:主机的与容器的/etc/localtime不-致

    2024年02月11日
    浏览(36)
  • yapi容器化docker部署以及mongodb容器的持久化挂载异常问题

    通过docker形式部署yapi,需要准备一个mongodb,然后直接在一个空文件夹里写好Dockerfile,其中通过wget下载yapi的zip包。 基本按照这篇文章:https://www.modb.pro/db/149666 来处理即可 把mongodb的docker 跑起来, --auth 表示需要密码才能访问 注意 原文中启动mongo的容器是这样的 首先创建Mon

    2024年02月14日
    浏览(54)
  • docker 容器操作、应用部署、mysql,redis,nginx、迁移与备份、Dockerfile

    mysql部署 redis nginx 常用和不常用的命令 dockerfile构建一个django项目 docker私有仓库 镜像传到官方仓库 镜像分层 私有仓库搭建 新建flask项目app.py 编写Dockerfile 用于构建flask项目的镜像 编写dockercompose的yml文件dockercompose.yml dockercompose启动 项目目录结构 luffy_api/Dockerfile 构建uwsgi+dj

    2023年04月13日
    浏览(54)
  • Elasticsearch+Kibana 的docker容器化部署与若干问题处理

    因为Elasticsearch的官方文档上写的不是很清楚会留下一些坑,所以本篇主要记录对docker搭建ElasticSearch+Kibana+ik分词器的过程和途中遇到的若干问题,既留给自己后面反复使用避免各种神坑,也可以为正在部署环境的读者提供一些参考。 以下是本次部署的环境信息,可以作为参考

    2024年02月03日
    浏览(48)
  • docker安装mysql容器创建成功但无法启动问题

    在我之前的文章里 使用docker安装mysql中在拉取了mysql:5.7版本的镜像后,使用了以下命令来创建容器,容器创建成功,但无法启动,如下: 执行创建命令后,docker ps 查看正在运行中的容器,显示为空, docker ps -a 查看,mysql容器已经创建成功,但是在创建好之后就退出了 鉴于上

    2024年02月12日
    浏览(41)
  • 2-Docker-应用-多容器部署Django+Vue项目(nginx+uwsgi+mysql)

    基于Linux CentOS 7系统(虚拟机),使用Docker,多容器部署Django+Vue项目 整体部署用到了:Django+Vue+nginx+mysql+uwsgi 先每一个容器单独部署,最后用Docker compose 语法整合,统一部署 参考文章:https://blog.csdn.net/qq_45445505/article/details/135563784 章标题:Docker介绍 节标题:Docker安装 总结梳

    2024年03月10日
    浏览(102)
  • docker容器mysql自动退出解决办法之一

    今天第一次使用dcoker加了挂载参数启动mysql时出现了mysql自动退出,启动命令如下: docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql 然后用 docker ps 命令发现查不到mysql容器。 然后

    2024年02月02日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包