docker volume ls 列表为空

Azi*_*ima 5 docker docker-volume

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

我运行一个容器并将主机目录安装到容器中。

docker run -it -p 4444:8000 -v c:/py:/azima 27b4b21eeb64 /bin/sh
Run Code Online (Sandbox Code Playgroud)

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

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

但是从another powershell我运行这个命令开始docker volume ls

这显示为空。

检查container提供此信息(如果有帮助):

"Mounts": [
        {
            "Type": "bind",
            "Source": "/host_mnt/c/py",
            "Destination": "/azima",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],
Run Code Online (Sandbox Code Playgroud)

为什么没有列出卷?

mch*_*wre 10

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

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

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

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

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

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

更多信息请点击这里

希望这可以帮助。


Adi*_*iii 7

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

在绑定挂载中,我们指定了它Host Path,但它不会显示在docker volumes ls我们指定的 docker 卷中volume name,我们可以使用以下命令查看 docker 卷docker volumes ls

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

 docker volume create alpine_test
Run Code Online (Sandbox Code Playgroud)

现在运行容器

docker run --rm  -v alpine_test:/root alpine ash -c "touch /root/test.txt"
 
Run Code Online (Sandbox Code Playgroud)

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

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

docker run  -v alpine_test:/root alpine ash -c "ls /root/"
Run Code Online (Sandbox Code Playgroud)

尽管如此,我们仍然可以看到最后创建的文件。

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

如果您检查附加卷的容器,它将显示 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": ""
                }
            ],
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

docker run -v /home/test/:/test -it --rm alpine
Run Code Online (Sandbox Code Playgroud)

对于安装,如果您检查容器,您将看到主机安装路径位置。

docker inspect container_id

 "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/test/",
                "Destination": "/root",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
Run Code Online (Sandbox Code Playgroud)