docker volume ls列表为空

时间:2019-07-19 05:22:28

标签: docker docker-volume

我正在使用docker version 18.09.2, build 6247962

我运行一个容器,并在该容器上安装了主机目录。

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

这创建了一个容器,并且主机目录c:/py已安装到/azima

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

但是从another powershell开始,当我运行此命令docker volume ls时。

这显示为空。

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

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

为什么未列出该卷?

2 个答案:

答案 0 :(得分:2)

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

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

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

docker volume将创建Named volumes,您可以使用docker volume create VOLUME_NAME手动创建。它们是在/var/lib/docker/volumes中创建的,只能通过其名称进行引用。

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

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

更多信息here

希望这会有所帮助。

答案 1 :(得分:1)

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

  

在绑定装载中,我们指定Host Path,并且它不显示在docker volumes ls和卷中,而我们指定docker volume name,我们可以使用docker 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

B ind挂载:绑定挂载是存储在容器主机文件系统上任何位置的文件或文件夹,已挂载到正在运行的容器中。绑定挂载与卷的主要区别在于,由于它可以存在于主机文件系统上的任何位置,因此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"
            }
        ],