【问题标题】:define volumes in docker-compose.yaml在 docker-compose.yaml 中定义卷
【发布时间】:2021-08-04 07:39:55
【问题描述】:

我正在为我的项目编写一个docker-compose.yaml 文件。我已经检查了卷文档here

我也理解 docker 中 volume 的概念,我可以挂载一个卷,例如-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/?该示例并未表明 & 是模棱两可的。

有人可以帮我澄清一下吗?

P.S.我猜想上面的 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._-]+$'

【问题讨论】:

    标签: docker docker-compose docker-volume


    【解决方案1】:

    映射的卷可以是主机上的文件/目录(有时在文档中称为bind mounts),也可以是可以使用docker volume 命令管理的docker 卷。

    docker-compose 文件中的 volumes: 部分指定 docker 卷,即不是文件/目录。您帖子中的第一个 docker-compose 使用了这样的音量。

    如果你想映射一个文件或目录(比如在你上一个 docker-compose 文件中),你不需要在 volumes: 部分指定任何东西。

    Docker 卷(在volumes: 部分中指定或使用docker volume create 创建的卷)当然也存储在您的主机上的某个位置,但是 docker 管理它,您通常不需要知道在哪里或什么格式是。

    这部分文档解释得很好,我觉得https://docs.docker.com/storage/volumes/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 2021-09-25
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多