docker-compose 卷不挂载目录,只有目录内的文件

时间:2021-04-16 16:41:27

标签: docker docker-compose docker-volume

听起来可能很奇怪,但我正在尝试让 docker-compose 将目录安装到我创建的卷中

volumes:
  - backend-data:/app/migrations/autogen-migrations
  - backend-data:/app/seeds/autogen-seeds
  - backend-data:/app/server/public
  - backend-data:/app/server/src/services/location

唯一的问题是,它不是简单地将文件夹映射到卷,而是将内容装入卷内。有没有办法告诉 docker-compose 复制/映射文件夹本身?

编辑: 已经尝试过

backend-data/autogen-migrations:/app/migrations/autogen-migrations

我收到以下错误:

Named volume "backend-data/autogen-migrations:/app/migrations/autogen-migrations:rw" is used in service "backend" but no declaration was found in the volumes section.

顺便说一句,这就是我的卷的声明方式

volumes:
  backend-data:
    driver: local

1 个答案:

答案 0 :(得分:0)

当您需要将本地目录挂载为 Docker 卷时,您可以在服务中使用以下语法:

volumes:
  - ./your/local/path:/app/migrations/autogen-migrations

这样Docker就在docker-compose.yml文件所在的文件夹中创建了一个本地路径“./your/local/path”,用于存放挂载卷的数据。在这种情况下,您不需要在 docker-compose.yml 中指定 volume 部分,因为您自己管理卷。 如果需要挂载多个文件夹,记得也要挂载多个本地文件夹:

volumes:
  - ./your/local/migrations/or/whatever/you/want:/app/migrations/autogen-migrations
  - ./your/local/seeds:/app/seeds/autogen-seeds
  - ./your/local/server/public:/app/server/public
  - ./your/local/server/src:/app/server/src/services/location

您也可以将 mounts 文件夹聚合在同一文件夹下:

volumes:
  - ./your/local/migrations:/app/migrations/autogen-migrations
  - ./your/local/seeds:/app/seeds/autogen-seeds
  - ./your/local/server:/app/server

在本例中,您在“./your/local/server”中找到了所有“/app/server/”内容。

如果使用语法:

volumes:
  backend-data:
    driver: local

您告诉 Docker:“Docker,请在需要时挂载对应于 backend-data:(在您的情况下为 backend-data:/app/migrations/autogen-migrations)的文件夹并存储我的数据!”。在这种情况下,Docker 自己管理“本地”文件夹,而不使用 docker-compose.yml 文件所在的文件夹。