要在多个服务中重复使用卷,必须在顶级
volumes
键中声明一个命名卷。
我目前正在尝试调试一个存在 docker bind mount 问题的应用程序。我注意到此应用程序的 compose.yaml 文件声明了${EXTRA_VOLUME}
每个服务下的卷。
其他所有重用卷均 (1) 在使用它的服务下声明,并且 (2) 在顶级volumes
键下声明。因此,其他卷均符合规范。
(1) 在使用它的服务下声明${EXTRA_VOLUME}
,但未在顶级volumes
键下声明。
所以,我想知道:发生了什么${EXTRA_VOLUME}
?我应该预料到什么问题?
答案1
Docker 有专门为此设立的页面--volume
,他们在其中讨论了卷、隐式绑定挂载(使用)和显式绑定挂载(使用)之间的差异--mount
。
总而言之,在上下文中docker compose
,volumes:
顶层部分用于声明必须经过卷驱动程序的卷(例如,本地文件系统支持的卷/var/lib/docker/volumes
、NFS 挂载、SMB 挂载、EBS 块卷等)。Docker 控制卷的生命周期,包括创建、挂载、删除等。
绑定挂载文件系统路径提供了类似的功能,但它不受 docker 管理:它只是一个在启动容器时在给定(内部)路径上可访问的文件系统路径/文件。因为它非常简单,并且不涉及卷驱动程序,所以它不需要(实际上,它不应该!)被声明为条目volume:
。