我正在写一个 docker-compose.yaml
我的项目的文件。我检查了卷文档 here .
我也理解volume
的概念在 docker 中,我可以挂载一个卷,例如-v my-data/:/var/lib/db
哪里my-data/
是我主机上的目录,而 /var/lib/db
是数据库容器内的路径。
我的困惑在于我上面放的链接。它有以下示例:
version: "3.9"
services:
db:
image: db
volumes:
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
- data-volume:/var/lib/backup/data
volumes:
data-volume:
我想知道这是否意味着我必须创建一个名为 data-volume
的目录在我的主机上?如果我的机器上有一个路径为 temp/my-data/
的目录怎么办?我想将该路径挂载到数据库容器 /var/lib/db
?我应该做下面的事情吗?version: "3.9"
services:
db:
image: db
volumes:
- temp/my-data/:/var/lib/db
volumes:
temp/my-data/:
我的主要困惑是 volumes:
底部的部分,我不确定卷名应该是我的目录路径还是应该只是我给出的字面上的名称,如果是后一种情况,那么如何将给定的名称映射到 temp/my-data/
在我的机器上?该示例并未表明 & 是模棱两可的以澄清这一点。有人可以帮我澄清一下吗?
附言我试过上面的 docker-compose 我猜,最后出现了错误:
ERROR: The Compose file './docker-compose.yaml' is invalid because:
volumes value 'temp/my-data/' does not match any of the regexes: '^[a-zA-Z0-9._-]+$'
最佳答案
映射卷可以是主机上的文件/目录(在文档中有时称为 bind mounts
),也可以是可以使用 docker volume
管理的 docker 卷。命令。volumes:
docker-compose 文件中的部分指定 docker 卷,即不是文件/目录。您帖子中的第一个 docker-compose 使用了这样的卷。
如果你想映射一个文件或目录(比如在你上一个 docker-compose 文件中),你不需要在 volumes:
中指定任何内容。部分。
Docker 卷(在 volumes:
部分中指定或使用 docker volume create
创建的卷)当然也存储在主机上的某个地方,但 docker 管理它,您通常不需要知道格式在哪里或格式是什么。
这部分文档很好地解释了它,我认为https://docs.docker.com/storage/volumes/
关于docker - 在 docker-compose.yml 中定义卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68647242/