1

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

提前致谢。

4

1 回答 1

1

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

DATA_PATH=/mnt/shared/data

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

于 2018-10-17T19:37:23.317 回答