2015-11-05 38 views
6

アプリケーションを実行する前に、環境変数を読み取る必要があるという要件があります。このために、私は、次のドッキングウィンドウのファイルenvsubstコマンドがコンテナに詰まっている

FROM nodesource/jessie:0.12.7 

# install gettext for envsubst 
RUN apt-get update 
RUN apt-get install -y gettext-base 

# cache package.json and node_modules to speed up builds 
ADD package.json package.json 
RUN npm install 

# Add source files 
ADD src src 

# Substiture value for backend endpoint env var 
RUN envsubst <src/js/envapp.js> src/js/app.js 

ADD node_modules node_modules 
EXPOSE 8000 
CMD ["npm","start"] 

を持つ上記envsubstラインは(お読みください)のenv変数$MYENVと代替それを読み込みます。しかし、ファイルapp.jsを開くと、それは空です。 コンテナに環境変数が存在するかどうかを確認しました。その値が読み取られて代入されない理由は何ですか? 私はまた、同じコマンドを容器で試してみました。画像を実行しても機能しません

答えて

5

これは、画像を実行するときにenvsubstには$MYENVが使用できない可能性が高いためです。

各RUNコマンドは、独自のシェルで実行されます。ドッカーのドキュメンテーションから

RUN(コマンドはシェルで実行される -/binに/ shの-c - シェル形)あなたは同様にあなたのプロフィールを調達する必要が

$MYENV環境変数が.bashrcファイルで提供されている場合たとえば、あなたは、このようなあなたのDockerfileを変更することができます。

RUN source ~/.bashrc && envsubst <src/js/envapp.js> src/js/app.js 
0

私は股関節を提案あなたがNodeを使用しているので、npm envsubモジュールを使用します。

このモジュールは十分にテストされており、ドッカーを念頭に置いて開発されています。

すでに完全なノードアーゼルを手元に持っている場合、他の依存関係に頼る必要はありません。

envsubが

として記述されているenvsubは、私は、パッケージの作者だハンドルバー

を経由してファイル・レベルの環境変数の置換を提供NodeJS

NodeJSグローバルCLIモジュールのenvsubstです。私はあなたがそれを楽しむと思う。

関連する問題