我已经用
Meteord将Meteor-app停靠,并且工作正常,我的问题是我想将一些设置传递给应用程序.
Meteord不会使用设置文件启动应用程序,因为通常会对应用程序进行设置(meteor –settings file.json).这也可以做with an environement variable 称为METEOR_SETTINGS.
由于我希望webapp与其他服务一起运行,我正在使用Docker Compose.
我有我想要作为环境变量读取的settings.json文件,所以类似于:
environment:
- METEOR_SETTINGS=$cat(settings.json)
但这不起作用.
如何使Docker组合动态创建基于JSON文件的环境变量?
最佳答案 根据settings.json中可调整变量的数量,不可能没有一些技巧:
如果它有很多设置,那么使用简单的shell脚本模板化docker-compose.yml相当容易,该脚本用settings.json的内容替换模板中的标记,就像在你的例子中一样.在这种情况下,您还希望包装docker-compose调用.简化示例:
泊坞窗,compose.yml.template:
environment:
- METEOR_SETTINGS=##_METEOR_SETTINGS_##
dc.sh:
#!/bin/sh
# replace ##_METEOR_SETTINGS_## with contents of settings.json and output to docker-compose.yml
sed -e 's|##_METEOR_SETTINGS_##|'"$(cat ./settings.json)"'|' \
"./docker-compose.yml.template" > "./docker-compose.yml"
# wrap docker-compose, passing all arguments
docker-compose "$@"
将2个文件放入项目根目录,然后使用chmod x dc.sh使包装器可执行,并调用./dc.sh -h.
如果只有几个设置,您可以在启动时处理容器内的模板.在启动Meteor之前,只需替换置于准备好的settings.json中的标记,并将ENV值传递给docker.这允许您只使用docker-compose ENV功能来配置Meteor.