使用Docker Compose将JSON文件读入环境variables
我用Meteorddocker化了一个Meteor-app,而且工作正常,我的问题是我想把一些设置传递给应用程序。
Meteord不会像设置文件那样启动应用程序,因为它通常会为应用程序提供设置( meteor --settings file.json
)。 这也可以用名为METEOR_SETTINGS
variables来METEOR_SETTINGS
。
因为我想让webapp与其他服务一起运行,所以我使用了Docker Compose。
我有我的settings.json
文件,我想读作为一个环境variables,所以像这样:
environment: - METEOR_SETTINGS=$cat(settings.json)
这虽然不起作用。
我怎样才能让Dockerdynamic创build这个基于JSON文件的环境variables?
不可能没有一些诡计,取决于settings.json
中可调整variables的数量:
如果是很多设置,用一个简单的shell脚本来docker-compose.yml
是非常容易的,这个shell脚本可以用settings.json
的内容replace模板中的一个标记,这很像你的例子。 在这种情况下,您还想包装docker-compose调用。 简单的例子:
docker-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
标记replace为传递给docker的ENV值即可。 这使您可以使用docker-compose ENVfunction来configurationMeteor。