我的最终结论是,我无法设置/c/users/...
位置,因为它未在#34; Docker&#34; <中共享/ p>
在此之后,我能够看到所有我的容器实例中的/c/users/..
目录。然后,我就可以在每个实例上使用-v
标志,基本上将文件写入主机。
我还没有得到的是,我不认为我现在实际上正在使用volumes
......但是它有效......
我试图让我的Docker托管的Redis实例保留其数据,但似乎没有使用已安装的卷。我正在使用Docker和VirtualBox / boot2docker组合工作,但是我已经转移到Docker for Windows,其中compose文件仍然有效,但我不确定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"
}
],
volumes
属性是否仍在与Docker for Windows一起使用,还是我错过了一点?
修改
如果我跑......
docker run --name vq-redis -d -v //c/users/r/.docker/data/vq-redis:/data redis redis-server --appendonly yes
...我可以看到容器出现在Kitematic中并且docker inspect
我可以看到挂载到我的本地文件夹。但是,本地文件夹未在Kitematic中显示...
如果我将数据添加到容器中托管的Redis服务器,则停止容器并再次启动它,数据就会消失。
我尝试在Kitematic中手动设置本地文件夹。这样就重新启动了容器,但我不确定是否再次传递了初始参数。你说:
&#34;如果在运行&#34;
时卷没有联网
我猜他们实际上是在运行中联网,如控制台中所示。
但是,我仍然可以将数据添加到容器中托管的Redis实例中。但是一旦我重新启动容器,它就消失了......
答案 0 :(得分:1)
它应该工作。我假设您没有收到任何错误(例如,权限问题等),并且您在重建之前删除了旧版本。是否创建了“/ var / lib / docker / volumes / 4079 ...”目录? 您可以尝试在Windows上使用双引导斜杠,这是某些版本的解决方法:
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 docker主机(例如,boot2docker)中。如何到达Docker主机卷取决于许多因素。
如果卷未在run
上联网,则重新启动将无济于事。 docker stop some-redis && docker rm some-redis
和重新run
。
EG。运行此命令
docker run --name some-redis -d -v $(pwd)/data:/data redis redis-server --appendonly yes
应该像你期望的那样工作。
ls ./data
=&gt; appendonly.aof
。
一开始显然是空的。销毁容器并使用相同的目录创建一个新容器将显示数据仍然存在:
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
=&GT; “baz” 的
(已销毁容器中设置的“bar”的上一个值)。
如果这对您不起作用,可能会出现一些特定于您的环境的问题 - 也许尝试使用基于Vagrant的解决方案或beta Docker或本机Linux主机。