使用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。