如何保存docker redis容器

我无法用redis数据库中的数据创builddocker redis容器的映像。 目前我正在这样做:

docker pull redis docker run --name my-redis -p 6379:6379 -d redis redis-cli 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> save OK 127.0.0.1:6379> exit docker stop my-redis docker commit my-redis redis_with_data docker run --name my-redis2 -p 6379:6379 -d redis_with_data redis-cli 127.0.0.1:6379> keys * (empty list or set) 

我显然不理解这里很基本的东西。 docker提交不从现有的容器创build一个新的图像?


好吧,我一直在挖一些东西。 hub.docker上的默认redis映像使用一个数据卷,然后将其安装在容器中的/ data处。 为了在容器之间共享这个容量,你必须用下面的参数启动一个新的容器:

 docker run -d --volumes-from <name-of-container-you-want-the-data-from> --name <new-container-name> -p 6379:6379 redis 

请注意,参数的顺序是重要的,否则docker运行将失败默默。

 docker volume ls 

会告诉你哪些数据卷已经由您的计算机上的docker创build。 我还没有find一种方法来给这些卷一个平凡的名字,而不是一个很长的随机string。

我还没有find挂载数据卷的方法,而只是使用–volumes-from命令。


好的。 我现在有它的工作,但它是culdgey。

 docker volume ls docker volume inspect <id of docker volume> 

您可以在本地文件系统上find泊坞窗卷的path。 然后,您可以将其安装在一个新的容器中,如下所示:

 docker run -d -v /var/lib/docker/volumes/<some incredibly long string>/_data:/data --name my-redis2 -p 6379:6379 redis 

这显然不是你要这样做的方式。 我会继续挖掘。


我把我现在发现的所有东西都放到博客文章中: 我的博客文章在medium.com上

也许这对别人有用

docker中的数据不是持久的,当你重新启动容器时,你的数据将会消失。 为了防止这种情况,您必须在容器上共享主机上的地图。 当容器重新启动时,它将从主机上的地图获取数据。

您可以在Docker文档中阅读更多关于它的信息: https : //docs.docker.com/engine/tutorials/dockervolumes/#data-volumes

从redis容器文档:

运行redis-server

 docker run -d --name redis -p 6379:6379 dockerfile/redis 

运行具有持久数据目录的redis-server。 (创builddump.rdb)

 docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis 

运行带有持久数据目录和密码的redis-server。

 docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis redis-server /etc/redis/redis.conf --requirepass <password> 

来源: https : //github.com/dockerfile/redis

手动使用数据卷和共享RDB文件并不难看,实际上这就是数据卷的devise目的,将数据从容器中分离出来。

但是,如果您确实需要/希望将数据保存到映像并以此方式共享,则可以将redis工作目录从卷/data更改到其他位置:

  • 选项1正在更改--dir启动redis容器时:

     docker run -d redis --dir /tmp 

    然后你可以按照你的步骤来创build新的形象。 请注意,由于权限问题,此方法只能使用/tmp

  • 选项2正在使用更改的WORKDIR创build新图像:

     FROM redis RUN mkdir /opt/redis && chown redis:redis /opt/redis WORKDIR /opt/redis 

    然后docker build -t redis-new-image并使用这个图像来完成你的工作。