Docker 卷挂载子目录而不覆盖整个目标

Docker 卷挂载子目录而不覆盖整个目标

我有以下情况。

我有一个备份摘录,它存在于本地文件夹中./app_backup。其中的示例目录结构如下:

./app_backup/plugins/plugin1
./app_backup/plugins/plugin2
./app_backup/plugins/plugin3
./app_backup/src/a
./app_backup/src/b
./app_backup/assets/mine.jpg
./app_backup/.../lots/more/...

我还有一个本地目录./plugins,用于存放我正在开发的本地插件。它看起来像这样:

./plugins/pluginX
./plugins/pluginY

整个结构需要安装到容器中。我通过 compose 进行此操作。

(如果存在命名冲突,则中的文件夹./plugins应优先于备份中的文件夹)

我需要将它们全部安装到容器启动后的主插件目录中,路径将是这样的容器内的预期结果

/app/main/plugins/plugin1
/app/main/plugins/plugin2
/app/main/plugins/plugin3
/app/main/plugins/pluginX
/app/main/plugins/pluginY

当然,容器的撰写文件可以简单地执行以下操作:

volumes:
  - ./app_backup/:/app/main/
  - ./plugins/pluginX:/app/main/plugins/pluginX
  - ./plugins/pluginY:/app/main/plugins/pluginY

然而,我并不总是知道本地插件的数量或名称,它可能是动态的所以我无法在撰写文件中明确定义每个插件子目录

例如,一个开发人员可能./plugins/pluginX有 10 个不同名称的,例如./plugins/pluginABC

因此我只需要挂载整个./plugins/目录,因为我们永远不会明确知道其中有哪些目录。

像这样:

volumes:
  - ./app_backup:/app/main
  - ./plugins:/app/main/plugins

这必然会引发另一个问题,如果我安装,./plugins那么整个/app/main/plugins(来自 app_backup)将被覆盖!

所以现在我只能让开发人员更新他们开发的每个插件的 Compose 文件。这是一个痛点,因为他们需要不断编辑 Compose 文件!

请告诉我我尝试做的事情是否可行,如果不行,有什么建议可以简化此工作流程。谢谢!

如果卷安装允许“仅子目录”,例如./plugins/*我认为它可以解决我的问题,但我认为它不能那样工作。我希望我错了。

编辑:

糟糕的解决方法:

  1. 每个插件都有自己的 Compose 文件。此 Compose 文件的唯一作用是处理单独的挂载路径。
  2. 查找以下项:./plugins/*/docker-compose.yml
  3. docker-compose -f在启动服务时包含这些文件。

我真的很不想为每项服务处理一个组合文件,但这至少实现了目标。

相关内容