Docker卷没有与Redis一起使用(mount会显示检查)

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

在这里输入图像说明

在此之后,我可以看到我的所有容器实例中的/c/users/..目录。 然后,我可以在每个基本上将文件写入主机的实例上使用-v标志。 我还没有得到的是,我不认为我现在实际上使用volumes …但它的工作…


我试图让我的Docker托pipe的Redis实例坚持其数据,但挂载的卷似乎并没有被使用。 我正在使用Docker的VirtualBox / boot2docker组合工作,但是我已经移动到Docker for Windows的撰写文件仍然工作,但我不知道的volumes属性。

docker-compose.yml文件:

 vq-redis: image: redis:latest ports: - "6379:6379" volumes: - /c/users/r/.docker/data/redis/data:/data 

添加或删除volumes定义并不重要,因为它将始终使用docker inspect显示如下所示:

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

Volume属性仍然与Docker for Windows一起工作,还是缺less一点?

编辑:

如果我跑…

 docker run --name vq-redis -d -v //c/users/r/.docker/data/vq-redis:/data redis redis-server --appendonly yes 

…我可以看到容器出现在Kitematic和docker inspect我可以看到一个安装去我的本地文件夹。 但是,本地文件夹不显示在Kitematic …

在这里输入图像说明

如果我将数据添加到托pipe在容器中的Redis服务器,那么停止容器并重新启动它,数据就消失了。

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

“如果卷在运行时没有联网”

我想他们实际上是联网运行在控制台中看到的。

在这里输入图像说明

不过,我可以将数据添加到托pipe在容器中的Redis实例。 但只要我重新启动容器,它已经不存在了

它应该工作。 我假设你没有得到任何错误(例如,许可问题等),并且在重build之前删除旧版本。 “/ var / lib / docker / volumes / 4079 …”目录是否被创build? 您可以尝试在Windows上使用双引号斜杠,这是一些版本的解决方法:

 volumes: - //c/users/r/.docker/data/redis/data:/data 

Redis将不会有任何关于未被创build的卷,但你有没有尝试其他服务,甚至基本的docker create -v ...docker run -v ...

更新:您对Docker的工作方式可能存在一些差距,这可能会影响到您的工作。

如果你做的docker run --name some-redis -d redis redis-server --appendonly yes它会创build一个类似于你的docker inspect输出的卷。 很明显,你的Windows机器上没有/var/lib/docker/volumes/...目录,这在VM泊坞主机(例如boot2docker)中。 您如何到达Docker主机卷取决于许多因素。

如果卷在run没有联网,重新启动将无济于事。 docker stop some-redis && docker rm some-redis是否docker stop some-redis && docker rm some-redis并重新run

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

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

 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的解决scheme或testing版Docker或本机Linux主机。