4

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

在此处输入图像描述

在此之后,我能够在我的所有容器实例中看到/c/users/..目录。然后我可以在每个实例上使用这个目录的标志,基本上将文件写入我的主机。我仍然不明白的是,我认为我目前并没有真正使用……但它确实有效……-vvolumes


我试图让我的 Docker 托管的 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"
        }
    ],

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 中手动设置本地文件夹。这似乎会重新启动容器,但我不确定是否再次传递了初始参数。你说:

“如果卷在运行时未联网”

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

在此处输入图像描述

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

4

1 回答 1

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

例如。运行此命令 docker run --name some-redis -d -v $(pwd)/data:/data redis redis-server --appendonly yes 应该可以按预期工作。 ls ./data=> 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

=>“巴兹”

(在被破坏的容器中设置的“bar”的先前值)。

如果这对您不起作用,则可能存在一些特定于您的环境的问题——也许可以尝试基于 Vagrant 的解决方案或 beta Docker 或本机 Linux 主机。

于 2016-07-07T07:32:04.697 回答