关于为新容器应用 docker 命名卷的奇怪问题

Strange issue about applying docker named volume for new container

根据我找到的所有信息,我了解到 docker 主机卷可以通过三种方式创建:

1- 忽略主机路径(它会自动创建一个具有随机 ID 的目录)

2-通过指定主机路径(它也会自动创建一个随机ID的目录)

3- 按命名卷并指定到主机路径

所以我首先尝试了两种方法:

$ docker run --name mongo-docker -v /data/db -p 27017:27017 -d mongo
$ docker run --name mongo-docker2 -v $(pwd)/data/:/data/db -p 27222:27017 -d mongo

然后我查看 docker 卷列表:

$ docker volume ls

DRIVER    VOLUME NAME
local     5b829a731245cb7fe3a1f28aca4c4c3c3791105be228182ccb9b2f72319180c8
local     fb058e804412fb56b2096e2cb903e3ae73647ef6ca076ad9003708b80f94ffc5

它看起来正是我所期望的。

但是当我尝试最后一个时,首先创建了一个卷:

$ docker volume create mongoVol
mongoVol

$ docker volume ls
DRIVER    VOLUME NAME
local     mongoVol

并将其用于主机卷路径,结果如下:

$ docker run --name mongo-docker3 -v mongoVol:/data/db -p 27322:27017 -d mongo
86bea0e52c9f395268665e191edc59f795d07266f17667502c7fa32879a6e021

$ docker volume ls
DRIVER    VOLUME NAME
local     0de25c92be504d0a6b9bb9c83aa8a6fe17bf9bc195562314ca49edb1c4cf4377   <=== create a new one for new container?
local     mongoVol

为什么要为此创建一个新目录?不应该只是“mongoVol”卷吗?

我无法在任何论坛、post 或任何视频中找到相关问题的答案....

mongo image's Dockerfile 两个 目录在 VOLUME 语句中命名。您正在 /data/db 而非 /data/configdb.

上安装内容

如果 Docker 文件将目录声明为 VOLUME 并且没有明确挂载在那里,Docker 会自动创建一个匿名卷(您的第一个案例)。这就是导致 docker volume ls 列表中出现额外数量的原因。