我正在一个有多个合作者的项目中;为了共享代码和计算环境,我们建立了一个github存储库,其中包括一个Dockerfile
和docker-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是否允许这种功能?是否有实现此目的的最佳做法?如果不是,我很好奇是否有人知道排除此功能的动机是什么,和/或为什么不认为它是个好主意。
谢谢。
答案 0 :(得分:1)
您非常亲密。我要补充的是,您有一个特定于主机的.env
文件,请参阅Environment variables in Compose,每台计算机上与docker-compose.yml
在同一文件夹中,并带有
DATA_PATH=/mnt/shared/data
或您喜欢的DATA_PATH
的任何值。只需将.env
添加到您的.gitignore
中,以便每个主机都将自己的配置保留在存储库之外,就是这样。