当前位置: 首页 > 知识库问答 >
问题:

如何保存docker redis容器

陈业
2023-03-14

我无法用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)

很明显,我对一些基本的东西不太了解。docker commit不是从现有容器创建新映像吗?

好吧,我一直在挖掘。hub上的默认redis图像。docker使用一个数据卷,然后将其装入容器中的/data。为了在容器之间共享此卷,必须使用以下参数启动一个新容器:

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

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

docker volume ls

将告诉您docker已经在您的html" target="_blank">计算机上创建了哪些数据卷。我还没有找到一种方法来给这些卷起一个简单的名字,而不是一个长的随机字符串。

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

好吧。我现在让它工作了,但是有点乱。

具有

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

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

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

这显然不是你的本意。我会继续挖掘的。

我把迄今为止我所发现的一切都写在了一篇博客文章中:我在媒体上的博客文章。通用域名格式

也许这对某人有用

共有2个答案

长孙高远
2023-03-14

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

但是,如果您真的需要/想要将数据保存为映像并以这种方式共享,您可以将redis工作目录从卷/data更改到其他地方:

>

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

    docker run -d redis --dir /tmp
    

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

    选项2是使用已更改的WORKDIR创建新映像:

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

    然后docker构建-t redis-new-Image并使用此映像完成您的工作。

  • 佟涵畅
    2023-03-14

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

    您可以在Docker docs中阅读更多信息:https://docs.docker.com/engine/tutorials/dockervolumes/#data-卷

    从redis容器文档:

    运行redis-server

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

    使用持久数据目录运行redis-server。(创建dump.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

     类似资料:
    • 问题内容: 我试图了解Docker的来龙去脉,但我对保存映像的前景感到困惑。 我运行了基本的Ubuntu映像,安装了Anaconda Python和其他一些东西…那么,保存进度的最佳方法是什么?保存,提交,导出? 这些似乎都无法与VirtualBox一样工作,后者为您的虚拟机提供了一个明显的保存状态文件。 问题答案: 通常的方法至少是通过:将容器的状态冻结为新映像。 注:由于评论由anchovyl

    • 警告:容器被设计为无状态的实例,任何需要持久化的数据,请采用数据库或文件系统保存在容器实例之外,我们不对保存在容器内的数据提供任何保障。当 DaoCloud 需要迁移,或用户扩容容器资源时,容器内的数据将会遗失,并且无法找回。 使用数据库服务 DaoCloud 在服务集成模块中提供了 MySQL、Redis、MongoDB、InfluxDB 等数据服务,如您需要做内容的持久化保存,可以选择使用 M

    • 我有一个stl容器,它保存了很多数据。 例如,定义是: 我想要的是将它保存在一个文件中,然后下次,我可以读取这个文件来快速恢复它。 我觉得正常的方式,比如: 不起作用,因为它只保存指针。 那么,如何将其保存在文件中并通过读取文件恢复呢?

    • 保存内容 能将已登录之频道的内容(项目),保存至Memory Stick™或主机内存。若要保存,可选择下述方法进行。 (1) 只选择1个项目保存 挑选想保存的项目后,选择选项选单的[保存]。 (2) 整合保存频道内的数个项目 挑选已保存的频道后,选择选项选单的[保存]。 (3) 选择数个频道后保存项目 挑选频道后,选择选项选单的[保存]。 提示 希望选择(2)或(3)时,能保存之项目数量可能因(设

    • 问题内容: 我有一个在docker-machine上运行的weblogic容器(正在使用docker toolbox在Windows 7上运行),并希望将日志从容器自动保存到Windows机器。 我知道我可以使用命令,但是,不是每次都将日志记录到Windows计算机上,而是有更好的方法将日志从容器保存到Windows计算机上的文件夹中吗? 问题答案: 请参阅“ Docker日志记录策略 ”,其中介

    • 我是Docker的新人,我正在尝试创建/使用现有映像来启动我的应用程序。在阅读了几篇stackoverflow帖子和Docker文档后,我能够使用Docker容器启动我的应用程序。现在我正在寻找保存修改后的Docker容器的正确方法,以便我可以重用容器通过运行docker命令来启动我的应用程序。 我看到人们使用$docker提交来保存docker容器。如果我运行此命令,容器将保存在哪里?其他人可以