为什么已经在 docker 引擎中创建了一些卷?

Why some volumes are already created inside docker engine?

每当我 运行 以下命令时:

docker volume ls

我可以看到我的 docker 引擎中已经创建了一些卷。

DRIVER    VOLUME NAME
local     5df9458932cd504e10b2b37856c434cbdf3876733684b100cbf390c965ac9581
local     6f7037bc33861a5e42a9f8bcd699f8184ff1916a297a718ccc4df5f369d07530
local     8a86c462020f35f1051b47c48555228a1df359251f2496c32ed45a9081bb1872
local     85ed838d2e081eddc672fd8ddb15bbb3eecc73adb270678c98b7c50a03ecb2fc
  1. 为什么要创建这些卷?

  2. 我怎样才能找到它们存在的目的?

如果您使用没有名称或主机安装点的卷启动 Docker 容器,Docker 将为它们创建一个唯一的名称。这些 docs 简单地提到了这样的匿名卷。最有可能的是,一个 Docker 文件有一个 VOLUME 部分,而不是 运行 具有相应的 --mount-v 标志来将一些本地卷绑定到容器的音量。

另见 this devops stack exchange answer

以下是创建匿名卷的示例:

Docker具有匿名卷的文件:

FROM alpine:3.9

VOLUME ["/root", "/test"]

Building/running 容器,无需安装或以其他方式命名 /root/test 卷:

$ docker volume ls
DRIVER    VOLUME NAME

$ docker build -t test .
$ docker run -it --rm -d --name volume-test  test:latest sh

$ docker volume ls
DRIVER    VOLUME NAME
local     5b332abd25b77c1ac324a0e3c00dc9a554cfe80c996a20bd77ef10c35c8ef98a
local     05c903f47f3f3666e03ee06154ff54b23547a5cc65750ca18bb40be40ed4049c
local     6f595aada6ae7c9fb16831996c2bdd8d652bec55a7cedf96afef95aec8f4e6e1
local     7f54c9dbbec46acc5a843499c65a50e23a78baa884facd026704d0dcb0362c9e
local     47a791197d6164757b015df1e2aba48bac3999720ead6b5981820a3aaece4113
local     214155fe63200cc859c1eddd2b31aa990fd6eb7c8614aa02bd8b57690b0fe53e

当然,您始终可以检查卷以找出它们的来源,但这对您可能有用也可能没有用:

docker inspect 5b332abd25b77c1ac324a0e3c00dc9a554cfe80c996a20bd77ef10c35c8ef98a