Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保存docker redis容器_Docker_Redis - Fatal编程技术网

如何保存docker redis容器

如何保存docker redis容器,docker,redis,Docker,Redis,我在用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

我在用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.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已经在您的计算机上创建了哪些数据卷。我还没有找到一种方法来给这些卷起一个简单的名字,而不是一个长的随机字符串

我还没有找到装载数据卷的方法,只是使用
--volumesfrom
命令


好的。我现在让它工作起来了,但它很麻烦

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

docker run -d -v /var/lib/docker/volumes/<some incredibly long string>/_data:/data \
   --name my-redis2 -p 6379:6379 redis
docker run-d-v/var/lib/docker/volumes//\u data:/data\
--名称my-redis2-p 6379:6379 redis
这显然不是你应该做的。我将继续挖掘


我把迄今为止我所发现的一切都写在了一篇博文中:


也许这对某些人有用

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

您可以在Docker文档中了解更多信息:

从redis容器文档:

运行redis服务器

docker run -d --name redis -p 6379:6379 dockerfile/redis
使用持久数据目录运行redis server。(创建dump.rdb)

docker run-d-p 6379:6379-v:/data——名称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>
docker run-d-p 6379:6379-v:/data--name redis dockerfile/redis redis server/etc/redis/redis.conf--requirepass
资料来源:

手动使用数据卷和共享RDB文件并不难看,事实上,这就是数据卷的设计目的,用于将数据与容器分离

但是,如果您确实需要/希望将数据保存到image并以这种方式共享,您可以将redis工作目录从volume
/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 build-t redis new image
    并使用此图像来完成您的工作


我可以停止并重新启动容器,并且数据仍然存在。我想把所有的数据都放在图像中,这样我就可以把图像发送给某人,他们就可以运行它了。首先停止容器(容器中的数据),然后提交它。也许您可以在停止之前提交?当容器停止时,数据不会消失。这(至少在我的系统上)是持续的。啊,我想我理解你的问题是错误的。您希望将数据保存在图像中。据我所知,这是不可能的。对不起:-(。你说得对,它确实是一个数据卷。我也不能让它工作。丑陋的解决方案是手动共享RDB文件,我认为:-(。
docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis redis-server /etc/redis/redis.conf --requirepass <password>
docker run -d redis --dir /tmp
FROM redis

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