我正在与多个协作者一起做一个项目;为了共享代码和计算环境,我们设置了一个 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 是否允许这种功能?是否有实现此目的的最佳实践方法?如果没有,我很好奇是否有人知道排除此功能背后的动机是什么和/或为什么它不被认为是一个好主意。
提前谢谢。
你非常接近。我要补充的是,您有一个特定于主机的.env
文件,请参阅Compose中的环境变量,在每台计算机上,与docker-compose.yml
位于同一文件夹中,与
DATA_PATH=/mnt/shared/data
或任何你喜欢DATA_PATH
的价值。只需将该.env
添加到您的.gitignore
,以便每个主机都将自己的配置保留在存储库之外,仅此而已。