Dockis卷未与Redis一起使用(mount确实显示为inspect)

时间:2016-07-06 22:25:26

标签: docker docker-for-windows

我的最终结论是,我无法设置/c/users/...位置,因为它未在#34; Docker&#34; <中共享/ p>

enter image description here

在此之后,我能够看到所有我的容器实例中的/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中显示...

enter image description here

如果我将数据添加到容器中托管的Redis服务器,则停止容器并再次启动它,数据就会消失。

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

  

&#34;如果在运行&#34;

时卷没有联网

我猜他们实际上是在运行中联网,如控制台中所示。

enter image description here

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

1 个答案:

答案 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主机。