如何保存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
并使用这个图像来完成你的工作。