美文网首页
redis数据从windows docker 转移到linux

redis数据从windows docker 转移到linux

作者: alue | 来源:发表于2022-10-27 22:18 被阅读0次

    之前开发时,redis服务安装在windows的docker镜像中,现在需要转移到linux的docker中。问题是,原先redis的一些测试数据也需要导入到linux的redis服务中。
    情况大概如下图所示:

    redis数据迁移

    实现这个数据迁移,看上去有很多种途径。但实际上,我尝试了一晚上,大费周折才搞定。

    尝试1 直接 docker save

    结果失败,一方面不包括redis的数据,另一方面windows docker 导出的redis镜像,在ubuntu中启动失败。

    尝试2 直接 docker export

    结果失败,windows docker 导出的redis容器文件系统,在ubuntu中启动失败。

    尝试3 在windows docker中利用redis-cli将redis 1的数据导出

    windows开发时,并没有做路径映射,所以不知道如何将windows docker中的文件导入宿主机。看网上说,可以利用 docker commit 实现,但我尝试了一下,没有成功。 docker commit貌似是一种增量生成镜像的方法,一时半会没弄懂。

    尝试4 在 windows 宿主机中利用redis-cli将redis 1的数据导出

    这个应该是可行的,但windows中并没有安装redis-cli,遂作罢。

    尝试5 利用docker cp 复制指令

    成功!思路是将redis数据文件拷贝到宿主机中,然后利用 vmware 的文件共享功能和docker的路径映射,将该数据文件拷贝到redis 2中。步骤大概为

    1. 在windows docker中用redis-cli的save指令,将redis数据保存在dump.rdb中。
    2. 在window docker中,利用下面指令,拷贝数据到宿主机中。
     docker cp containerID:/data/dump.rdb D:/share
    
    1. 打开 vmware 的文件共享功能。
    2. 在ubuntu的docker中(开启了路径映射,所以能够直接访问共享文件夹),将dump.rdb拷贝到 /data路径中,替换redis 2 自身的数据.
    3. 在ubuntu的docker的redis-cli 中,输入redis-cli shutdown nosave 指令,退出redis服务,并且不保存数据,不然拷贝过来数据会被篡改。

    有人可能会说,为什么不先停止redis服务,然后再拷贝替换数据。原因是一旦停止redis服务,容器就自动退出了,无法完成步骤4.

    可见,一个简单的数据迁移,真正实施起来,还是有很多坑的。

    相关文章

      网友评论

          本文标题:redis数据从windows docker 转移到linux

          本文链接:https://www.haomeiwen.com/subject/tpqxtdtx.html