如何保存docker redis容器

ehr*_*974 10 redis docker

我在使用redis数据库中的数据创建docker 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)
Run Code Online (Sandbox Code Playgroud)

我显然不明白这里的一些基本知识。docker commit不会从现有容器创建新映像吗?


好吧,我一直在做一些挖掘工作。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
Run Code Online (Sandbox Code Playgroud)

请注意,参数的顺序很重要,否则docker run将静默失败。

docker volume ls
Run Code Online (Sandbox Code Playgroud)

会告诉您docker在您的计算机上已经创建了哪些数据卷。我还没有找到一种方法来给这些卷起一个琐碎的名字,而不是一个很长的随机字符串。

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


好的。我现在可以使用它了,但是很笨拙。

docker volume ls
docker volume inspect <id of docker volume>
Run Code Online (Sandbox Code Playgroud)

您可以在本地文件系统上找到docker卷的路径。然后,您可以将其安装在新容器中,如下所示:

docker run -d -v /var/lib/docker/volumes/<some incredibly long string>/_data:/data --name my-redis2 -p 6379:6379 redis
Run Code Online (Sandbox Code Playgroud)

显然,这不是您要执行此操作的方式。我继续挖掘。


我将到目前为止发现的所有内容都放在博客文章中:我在medium.com上的博客文章

也许对某人有用

Fre*_*nus 11

泊坞窗中的数据不是永久性的,当您重新启动容器时,数据将消失。为避免这种情况,您必须与容器共享主机上的映射。容器重新启动时,它将从主机上的映射中获取数据。

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

从redis容器文档中:

运行redis-server

docker run -d --name redis -p 6379:6379 dockerfile/redis
Run Code Online (Sandbox Code Playgroud)

使用永久数据目录运行redis-server。(创建dump.rdb)

docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis
Run Code Online (Sandbox Code Playgroud)

使用永久数据目录和密码运行redis-server。

docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis redis-server /etc/redis/redis.conf --requirepass <password>
Run Code Online (Sandbox Code Playgroud)

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