docker volume ls 列表为空

docker volume ls lists empty

提问人:Azima 提问时间:7/19/2019 最后编辑:Azima 更新时间:6/18/2021 访问量:10772

问:

我正在使用 .docker version 18.09.2, build 6247962

我运行了一个容器,并将主机目录挂载到容器中。

docker run -it -p 4444:8000 -v c:/py:/azima 27b4b21eeb64 /bin/sh

这将创建一个容器,并且主机目录已挂载到 。c:/py/azima

我可以检查、创建、读取文件,并且它正在工作。

但是从我运行这个命令开始.another powershelldocker volume ls

这显示为空。

检查会给出以下信息(如果有帮助):container

"Mounts": [
        {
            "Type": "bind",
            "Source": "/host_mnt/c/py",
            "Destination": "/azima",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],

为什么卷没有列出?

docker卷

评论

0赞 Adiii 7/19/2019
您的共享 C 驱动器吗?您使用的是哪个 Docker 版本?对于新版本,您需要以这种方式安装c:/py:/azima
0赞 Azima 7/19/2019
@Adiii ..是的,驱动器是共享的。.正如帖子中所说,除了列表之外,一切似乎都很好。docker version 18.09.2, build 6247962
0赞 Adiii 7/19/2019
好吧,所以你把两件事混为一谈,让我来回答一下!
0赞 Adiii 7/19/2019
哦,你已经得到了答案:D

答:

9赞 mchawre 7/19/2019 #1

这是因为 option 将使用 bind-mounts 挂载到容器内的目录中。-v c:/py:/azimac:/py/azima

绑定挂载基本上只是从容器内的主机绑定某个目录或文件,您就是这样做的。

这就是为什么当您检查容器时,您会看到"Type": "bind"

docker volume 将创建您手动创建的命名卷。它们是在 中创建的,并且只能通过其名称引用。docker volume create VOLUME_NAME/var/lib/docker/volumes

这些命名卷仅在 docker volume ls 命令中列出。

当您检查连接到该卷的容器时,您会看到"Type": "volume"

更多信息请点击此处

希望这会有所帮助。

6赞 Adiii 7/19/2019 #2

Docker 卷和 Docker 挂载是两个不同的东西。

在绑定挂载中,我们指定,但它不显示在 和 volume 中,我们指定 docker,我们可以看到 docker volume 使用Host Pathdocker volumes lsvolume namedocker volumes ls

卷:卷是存储 Docker 容器创建或使用的持久性数据的首选方式。主机文件系统还存储卷,类似于绑定挂载。但是,默认情况下,Docker 会完全管理它们并将它们存储在 ~/docker/volumes 下。

 docker volume create alpine_test

现在运行容器

docker run --rm  -v alpine_test:/root alpine ash -c "touch /root/test.txt"
 

这将只会使用卷创建一个文件,容器将终止。alpine_test

现在,如果我们运行另一个容器和列表文件

docker run  -v alpine_test:/root alpine ash -c "ls /root/"

尽管如此,我们仍然能够看到上次创建的文件。

如果容器终止,数据仍保留在卷中,并可供以后使用。

如果检查卷附加容器,它将显示 docker 卷路径

docker inspect container_id

 "Mounts": [
                {
                    "Type": "volume",
                    "Name": "alpine_test",
                    "Source": "/var/snap/docker/common/var-lib-docker/volumes/alpine_test/_data",
                    "Destination": "/root",
                    "Driver": "local",
                    "Mode": "z",
                    "RW": true,
                    "Propagation": ""
                }
            ],

enter image description here

绑定挂载:绑定挂载是存储在容器主机文件系统上任何位置的文件或文件夹,挂载到正在运行的容器中。绑定挂载与卷的主要区别在于,由于它可以存在于主机文件系统上的任何位置,因此 Docker 之外的进程也可以修改它。

docker run -v /home/test/:/test -it --rm alpine

对于挂载,如果检查容器,则会发现主机挂载路径位置。

docker inspect container_id

 "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/test/",
                "Destination": "/root",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],