我很难理解命名卷在docker docs的以下示例中的确切作用:
C:\WINDOWS\SYSTEM32
我的猜测是,第一次出现的命名卷(#1) 定义了卷内包含的内容,而后续出现的内容(#2 )只需分享卷的内容与它们所引用的任何容器。
猜测是否正确?
答案 0 :(得分:5)
在顶级data-volume:
键下列出volumes:
会在主机上创建一个命名卷(如果它尚不存在)。根据此source
如果通过docker run -v my-precious-data:/ data imageName从image运行新容器来创建命名卷,则/ data下的image / container中的数据将被复制到named中体积。
如果您创建另一个容器绑定到现有的命名卷,则不会复制/覆盖新映像/容器中的任何文件,它将使用指定卷内的现有数据。
- 他们没有docker命令来备份/导出命名卷。但是,您可以通过“docker volume inspect [volume-name]”找到文件的实际位置。
醇>
如果卷为空并且两个容器都在目标目录中有数据,则要运行的第一个容器将其数据装入卷,而另一个容器将看到该数据(而不是它自己的数据)。我不知道哪个容器会先运行(虽然我希望它从上到下执行)但是你可以使用depends_on强制执行一个订单here
-------------------更新
使用版本3 Compose文件在swarm模式下部署堆栈时,将忽略depends_on选项。
答案 1 :(得分:0)
我理解你的猜测方式,你并不完全正确。
在docker-compose文件中声明和引用一个命名卷将创建一个空卷,然后可以在其卷部分中说明这些内容的服务进行访问和共享。
如果要共享命名卷,则必须在docker-compose文件的顶级卷部分中声明此卷。示例(如已在您自己链接的docker文档中):
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:
启动时卷将为空(因此,装入该卷的容器中的文件夹)。它的内容将是运行时服务活动的结果。
希望能让它更加清晰。