命名卷在docker中如何工作?
在docker的以下示例中,我很难理解命名卷是如何工作的:命名卷在docker中如何工作?,docker,docker-compose,Docker,Docker Compose,在docker的以下示例中,我很难理解命名卷是如何工作的: 版本:“3” 服务: db: 图像:db 卷数: #1 -数据量:/var/lib/db 备份: 图像:备份服务 卷数: #2 -数据量:/var/lib/backup/data 卷数: 数据量: 我的猜测是,命名卷的第一次出现(#1)定义了卷中包含的内容,而后续出现(#2)只是与引用它们的任何容器共享卷的内容 这个猜测正确吗?就我理解你的猜测而言,你并不完全正确 在docker compose文件中声明和引用命名卷将创建一个空卷,然
版本:“3”
服务:
db:
图像:db
卷数:
#1
-数据量:/var/lib/db
备份:
图像:备份服务
卷数:
#2
-数据量:/var/lib/backup/data
卷数:
数据量:
我的猜测是,命名卷的第一次出现(#1)定义了卷中包含的内容,而后续出现(#2)只是与引用它们的任何容器共享卷的内容
这个猜测正确吗?就我理解你的猜测而言,你并不完全正确 在docker compose文件中声明和引用命名卷将创建一个空卷,然后服务可以在其卷部分中这样说来访问和共享该空卷 如果要共享命名卷,必须在docker compose文件的顶级卷部分声明此卷。示例(如您已经链接的docker文档): 该卷在启动时将为空(因此该卷装载到的容器中的文件夹也将为空)。它的内容将是运行时服务acions的结果
希望这能让它更清楚一点。列出了顶级
卷下的数据卷:
,
键在主机上创建一个命名卷(如果它还不存在)。根据这一点,其行为方式如下
docker run-v my precious data:/data imageName
从映像运行新容器来创建命名卷,则/data下映像/容器中的数据将复制到命名卷中
谢谢你的回答。据我所知,尽管您的第一个示例中的命名卷正在创建中,但它们基本上是无用的(因为只有一个特定容器可以访问它)?而在第二个示例中,
数据卷
实际上用于链接容器之间的这两个目录。我说的对吗?是的,通过第二个示例,您希望实现容器与卷的链接。这在很大程度上取决于我对文档的理解。我已经更新了我的答案,删除了“即时创建”部分。这似乎不适用于docker compose,尽管它适用于docker cli。示例:docker run-ti-v data volume:/var/lib/data alpine/bin/sh
实际上创建了该卷,并使其他容器也可以访问该卷。虽然链接源现在是404,但也解释了,以防需要某个权威源。
version: "3"
services:
db:
image: db
volumes:
#1 uses the named and shared volume 'data-volume' created with #3
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
#2 uses the named and shared volume 'data-volume' created with #3
- data-volume:/var/lib/backup/data
volumes:
#3 creates the named volume 'data-volume'
data-volume: