如何为 docker 编写指定特定于站点的卷



我正在与多个协作者一起做一个项目;为了共享代码和计算环境,我们设置了一个 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 是否允许这种功能?是否有实现此目的的最佳实践方法?如果没有,我很好奇是否有人知道排除此功能背后的动机是什么和/或为什么它不被认为是一个好主意。

提前谢谢。

你非常接近。我要补充的是,您有一个特定于主机的.env文件,请参阅Compose中的环境变量,在每台计算机上,与docker-compose.yml位于同一文件夹中,与

DATA_PATH=/mnt/shared/data

或任何你喜欢DATA_PATH的价值。只需将该.env添加到您的.gitignore,以便每个主机都将自己的配置保留在存储库之外,仅此而已。

最新更新