docker - 在 docker-compose.yml 中定义卷

标签 docker docker-compose docker-volume

我正在写一个 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/

相关文章:

postgresql - 如何使用卷将数据保存在 dockerized postgres 数据库中

docker - Kubernetes 使用基础镜像填充

java - 耳朵/ jar / zipper 里面的文件上的Docker卷?

java - 如何使用谷歌云数据存储模拟器和java实现docker镜像

postgresql - 无法从外部登录到 Kubernetes 集群内部的 Postgres

reactjs - 无法访问该站点 docker-compose

python - 无法连接到 Docker 中的 MySql。抛出拒绝访问错误。 Flask-SqlAlchemy

docker - Kubernetes - 无法在 Azure 文件共享上安装 Windows 路径(Linux 安装正常)

elasticsearch - sebp/elk logstash无法使用Kafka接收数据

docker - 使用 Deployment 在 kubernetes 中模拟守护进程集