试图了解dockerfile及其目录中的VOLUME命令

时间:2019-05-07 07:13:09

标签: docker containers dockerfile

我最近才开始在使用Windows的本地计算机上使用docker,而我正处于尝试了解音量的阶段。 据我了解,在命令行中,您只需添加以下命令即可将本地目录连接到容器目录:

-v [host location]:[container location]

使用dockerfile时,您指定容器目录:

VOLUME [container location]

因此,当使用

运行该命令时
docker volume ls

我可以看到在计算机上创建的卷

DRIVER              VOLUME NAME
local               3d25e0608d5500c4dba29f8c3bc7b5ba4d5348e6fbd54644a20a5701f0b9f427

我的问题是我试图在计算机上了解此卷在哪里?

使用检查给我这个结果:

[
    {
        "CreatedAt": "2019-05-01T13:47:41Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/3d25e0608d5500c4dba29f8c3bc7b5ba4d5348e6fbd54644a20a5701f0b9f427/_data",
        "Name": "3d25e0608d5500c4dba29f8c3bc7b5ba4d5348e6fbd54644a20a5701f0b9f427",
        "Options": null,
        "Scope": "local"
    }
]

,我不明白WHERE到底是“ / var / lib / docker / volumes / ...”。 docker正在使用的虚拟Linux驱动器上吗?

2 个答案:

答案 0 :(得分:0)

共有三种类型的卷:主机卷,匿名卷和命名卷:

A host volume lives on the Docker host's filesystem and can be accessed from within the container. To create a host volume:

docker run -v /path/on/host:/path/in/container ...

An anonymous volume is useful for when you would rather have Docker handle where the files are stored. It can be difficult, however, to refer to the same volume over time when it is an anonymous volumes. To create an anonymous volume:

docker run -v /path/in/container ...

A named volume is similar to an anonymous volume. Docker manages where on disk the volume is created, but you give it a volume name. To create a named volume:

docker volume create somevolumename
docker run -v name:/path/in/container ...

来源:Docker

答案 1 :(得分:0)

您不应该能够直接访问Docker命名卷(或/var/lib/docker中的其他任何文件)。例如,backup and restore for named volumes上的官方Docker示例启动了额外的容器,这些容器安装了相同的卷以进行基本的数据管理操作。

如果您需要直接访问卷中的数据,使用主机目录绑定安装可能是最简单的选择。

您应该避免在Dockerfile中编写VOLUME指令。您不需要使用docker run -v将目录装载到容器中;它的主要作用是自动为您添加一个-v选项(如果您还没有的话)。实际上,您将不会获得任何好处,并且会遭受一些令人困惑的副作用(特别是RUN步骤将不会在VOLUME目录中进行任何持久更改)。

您在docker volume ls中看到的匿名卷可能是您的VOLUME指令的结果。

相关问题