首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有与Redis一起使用的码头卷(挂载显示在检查中)

没有与Redis一起使用的码头卷(挂载显示在检查中)
EN

Stack Overflow用户
提问于 2016-07-06 22:25:25
回答 1查看 4.2K关注 0票数 4

我的最后结论是,我无法设置/c/users/... 的位置,因为它不是在“Docker”中共享的。

在此之后,我能够看到/c/users/.. 目录中的中的E 220E 121我的容器实例。然后,我能够在每个实例中使用标志和这个目录,主要是将文件写入我的主机。我仍然不明白的是,我认为我现在并没有真正使用volumes .但它有效.

我试图让我的Docker托管Redis实例来持久化它的数据,但是挂载的卷似乎没有被使用。我使用Docker和VirtualBox/boot2docker进行组合,但是我已经迁移到Docker,在那里仍然可以使用复合文件,但是我不确定volumes属性。

我的docker-compose.yml文件:

代码语言:javascript
复制
vq-redis:
  image: redis:latest
  ports:
   - "6379:6379"
  volumes:
    - /c/users/r/.docker/data/redis/data:/data

如果我添加或删除volumes定义并不重要,因为它总是在docker inspect中显示类似于

代码语言:javascript
复制
    "Mounts": [
        {
            "Name": "40791b26771b5d62778d85b0ef24e74e516f95d32cf217424232ce8f8a1b8c6f",
            "Source": "/var/lib/docker/volumes/40791b26771b5d62778d85b0ef24e74e516f95d32cf217424232ce8f8a1b8c6f/_data",
            "Destination": "/data",
            "Driver": "local",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],

volumes属性是否仍在使用Docker,还是我遗漏了一点?

编辑:

如果我跑..。

代码语言:javascript
复制
docker run --name vq-redis -d -v //c/users/r/.docker/data/vq-redis:/data redis redis-server --appendonly yes

..。我可以看到容器出现在基特列和docker inspect,我可以看到一个挂载到我的本地文件夹。然而,本地文件夹没有显示在基特列..。

如果我将数据添加到驻留在容器中的Redis服务器上,那么停止容器并再次启动它--数据将消失。

我尝试手动设置基特列的本地文件夹。这似乎会重新启动容器,但我不确定是否再次传递初始参数。你说:

“如果卷没有联网运行”

我想他们实际上是联网运行的,就像在控制台上看到的那样。

不过,我仍然可以将数据添加到容器中承载的Redis实例中。但一旦我重新启动容器它就消失了..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-07 07:32:04

应该管用的。我想你没有发现任何错误(例如,权限问题等等)。在重建之前,你要移除旧的构建。“/var/lib/docker/volumes/4079.”创建目录?您可以尝试在Windows上使用双前导斜杠,这对于某些版本来说是一种解决方案:

代码语言:javascript
复制
volumes:
    - //c/users/r/.docker/data/redis/data:/data

Redis与未创建的卷没有任何关系,但您是否尝试过其他服务,甚至基本的docker create -v ...docker run -v ...

更新:在您对Docker如何工作的理解中可能存在一些空白,这可能会阻碍您的工作。

如果您执行docker run --name some-redis -d redis redis-server --appendonly yes,它将创建一个与docker inspect输出中的卷类似的卷。很明显,您的Windows机器上没有一个/var/lib/docker/volumes/...目录--它位于VM停靠主机(例如,boot2docker)中。如何到达Docker主机卷取决于多个因素。

如果这些卷没有在run上联网,重新启动也于事无补。做docker stop some-redis && docker rm some-redis和re-run.

例如:运行此命令docker run --name some-redis -d -v $(pwd)/data:/data redis redis-server --appendonly yes应该像您所期望的那样工作。ls ./data => appendonly.aof.

一开始显然是空的。销毁容器并创建一个具有相同目录的新容器将显示数据仍然存在:

代码语言:javascript
复制
docker exec some-redis echo "set bar baz" | redis-cli
docker stop some-redis
docker rm some-redis
docker run --name some-redis2 -d -v $(pwd)/data:/data redis redis-server --appendonly yes
docker exec some-redis2 echo "get bar" | redis-cli

=> "baz“

(在销毁的容器中设置的"bar“的前一个值)。

如果这对您不起作用,那么您的环境可能会出现一些特定的问题--可能会尝试基于Vagrant的解决方案或beta Docker或本地Linux主机。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38234793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档