如何为 docker-compose 指定站点特定的卷

How to specify site-specific volumes for docker-compose

我正在与多个合作者合作开展一个项目;为了共享代码和计算环境,我们设置了一个 github 存储库,其中包含一个 Dockerfiledocker-compose.yml 文件。我可以处理代码,而我的合作者只需拉取存储库,运行 docker-compose up 并可以在我开发它们的相同环境中访问我的 jupyter notebooks。

唯一的问题是,因为我们在不同的站点工作,所以我们计算的数据位于不同的位置。所以在我这边,我希望我的 docker-compose.yml 包括:

  volumes:
    - /mnt/shared/data:/data

而我的合作者需要它来表达类似

  volumes:
    - /Volumes/storage/data:/data

我知道执行此操作的一种方法是使用环境变量;在 docker-compose.yml 文件中:

  volumes:
    - "$DATA_PATH":/data

这迫使他们运行像这样:

DATA_PATH=/Volumes/storage/data docker-compose up

作为解决方案,这不一定是个问题,但我觉得它很笨拙,而且无法在存储库中进行自我记录。我可以将 docker-compose 包装在 shell 脚本中(这是几乎所有问题的潜在解决方案),但这也让人觉得笨拙。我不禁怀疑这里有更好的解决方案。 docker-compose 是否支持这种功能?是否有实现此目的的最佳实践方法?如果不是,我很好奇是否有人知道排除此功能背后的动机可能是什么 and/or 为什么它不被认为是一个好主意。

提前致谢。

你们非常亲密。我要补充的是,您有一个特定于主机的 .env 文件,请参阅 Environment variables in Compose,在每台计算机上,与 docker-compose.yml 位于同一文件夹中,其中

DATA_PATH=/mnt/shared/data

或您喜欢的 DATA_PATH 的任何值。只需将 .env 添加到您的 .gitignore,这样每个主机都会将自己的配置从存储库中删除,仅此而已。