2016-04-17 12 views
3

Meteor-appをMeteordでドッキングしました。うまくいきました。私の問題は、いくつかの設定をアプリに渡したいということです。JSON-fileをDockerで環境変数に読み込みます。

Meteordは、設定ファイルを使ってアプリケーションを起動しません。これは、通常、設定をアプリケーションに与えるためです(meteor --settings file.json)。これは、と呼ばれるwith an environement variableを行うことも可能です。

webappに他のサービスを実行させたいので、私はDocker Composeを使用しています。

は、私は環境変数として読み込むことにしたい私のsettings.json -fileを持っているので、何かのように:

environment: 
    - METEOR_SETTINGS=$cat(settings.json) 

しかしこれは動作しません。

DockerでJSONファイルに基づいてこの環境変数を動的に作成できるようにするにはどうすればよいですか?それはそれはしてテンプレートにトークンを置き換える簡単なシェルスクリプトでdocker-compose.ymlをテンプレートにかなり簡単です設定の多くはなら

settings.jsonに微調整できる変数の量に応じて、いくつかの策略なしに可能

答えて

2

ありません、あなたの例によく似ているsettings.jsonの内容。その場合、ドッカー作成コールをラップすることも必要です。簡単な例:

ドッキングウィンドウ-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 "[email protected]" 

は作ることchmod +x dc.sh、その後、プロジェクトのルートに2つのファイルを入れてくださいラッパーは実行可能で、./dc.sh -hを呼び出します。

少数の設定の場合は、のテンプレートを起動するときにそのテンプレートを処理することができます。メーターを起動する前に、用意されたsettings.jsonに入れられたトークンをドッカーに渡されたENV値に置き換えてください。これにより、docker-compose ENV機能を使用してMeteorを設定することができます。

+0

ありがとうございました! docker-compose呼び出しをラップすることは何を意味しますか?答えにシェルスクリプトを使用したテンプレートテクニックの例を提供できますか? – Esso

+0

私は答えをテストしましたが、テストされていません。 –

+0

唯一の問題は、Meteorに組み込まれている環境変数へのアクセスがないことがわかったので、Nodeを経由する必要があります。私の解決策は、['env'-file](https://docs.docker.com/compose/env-file/)の' METEOR_SETTINGS'変数にJSON設定を貼り付けることでしたが、この提案されたscriped多くの設定変数がある場合、スクリプトは 'env'ファイルを作成します。 – Esso

関連する問題