如何为 docker-compose 指定站点特定的卷
How to specify site-specific volumes for docker-compose
我正在与多个合作者合作开展一个项目;为了共享代码和计算环境,我们设置了一个 github 存储库,其中包含一个 Dockerfile
和 docker-compose.yml
文件。我可以处理代码,而我的合作者只需拉取存储库,运行 docker-compose up
并可以在我开发它们的相同环境中访问我的 jupyter notebooks。
唯一的问题是,因为我们在不同的站点工作,所以我们计算的数据位于不同的位置。所以在我这边,我希望我的 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 是否支持这种功能?是否有实现此目的的最佳实践方法?如果不是,我很好奇是否有人知道排除此功能背后的动机可能是什么 and/or 为什么它不被认为是一个好主意。
提前致谢。
你们非常亲密。我要补充的是,您有一个特定于主机的 .env
文件,请参阅 Environment variables in Compose,在每台计算机上,与 docker-compose.yml
位于同一文件夹中,其中
DATA_PATH=/mnt/shared/data
或您喜欢的 DATA_PATH
的任何值。只需将 .env
添加到您的 .gitignore
,这样每个主机都会将自己的配置从存储库中删除,仅此而已。
我正在与多个合作者合作开展一个项目;为了共享代码和计算环境,我们设置了一个 github 存储库,其中包含一个 Dockerfile
和 docker-compose.yml
文件。我可以处理代码,而我的合作者只需拉取存储库,运行 docker-compose up
并可以在我开发它们的相同环境中访问我的 jupyter notebooks。
唯一的问题是,因为我们在不同的站点工作,所以我们计算的数据位于不同的位置。所以在我这边,我希望我的 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 是否支持这种功能?是否有实现此目的的最佳实践方法?如果不是,我很好奇是否有人知道排除此功能背后的动机可能是什么 and/or 为什么它不被认为是一个好主意。
提前致谢。
你们非常亲密。我要补充的是,您有一个特定于主机的 .env
文件,请参阅 Environment variables in Compose,在每台计算机上,与 docker-compose.yml
位于同一文件夹中,其中
DATA_PATH=/mnt/shared/data
或您喜欢的 DATA_PATH
的任何值。只需将 .env
添加到您的 .gitignore
,这样每个主机都会将自己的配置从存储库中删除,仅此而已。