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

时间:2018-10-17 15:02:25

标签: docker docker-compose mounted-volumes

我正在一个有多个合作者的项目中;为了共享代码和计算环境,我们建立了一个github存储库,其中包括一个Dockerfiledocker-compose.yml文件。我可以编写代码,而我的协作者只需拉出存储库,运行docker-compose up,即可在与开发它们相同的环境中访问我的jupyter笔记本。

唯一的问题是,由于我们在不同的站点上工作,因此我们正在计算的数据位于不同的位置。因此,在我的末端,我希望我的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是否允许这种功能?是否有实现此目的的最佳做法?如果不是,我很好奇是否有人知道排除此功能的动机是什么,和/或为什么不认为它是个好主意。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

DATA_PATH=/mnt/shared/data

或您喜欢的DATA_PATH的任何值。只需将.env添加到您的.gitignore中,以便每个主机都将自己的配置保留在存储库之外,就是这样。