CMDで環境変数を使用する


83

DockerfileのCMDスタンザで環境変数を使用できますか?

私はこのようなことをしたい:

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]

$ MEMCACHE_11211_TCP_ *は、docker runコマンドの--linkパラメーターを含めることで自動的に設定されます。また、$ ARGは、実行時にユーザーが構成できます。おそらく「-e」パラメーターを使用しますか?

これは私にはうまくいかないようです。たとえば、文字列「$ ARG」を文字通り通過しているようです。

回答:


57

この答えは少し遅れるかもしれません。ただし、の環境CMDは、引数の記述方法によって解釈が少し異なります。をCMD(配列内ではなく)文字列として渡すと、execではなくシェルとして起動されます。https://docs.docker.com/engine/reference/builder/#cmdを参照してください

CMD配列構文なしでシェルとして実行してみてください。

CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT


11

両方のアンディはそれを正しかった。json構文はエントリポイントをバイパスします。例のようにCMDを使用すると、デフォルトのエントリポイントへの引数と見なされます。/bin/sh -cこれにより、環境変数が解釈されます。

どちらの場合も、DockerはCMDの変数を評価しません。前者では、コマンドが直接呼び出されるため、何も解釈されません。後者では、変数はによって解釈されshます。


7

私はそれがされてどのように話すことができないはず例えば、仕事にしていますが、シェルスクリプトとしてこれを呼び出した場合、私が思うにCMD runmyserver.sh、シェル変数のその後の解釈は、CMDが実際に走ったまで延期されるだろう。

だから、試してみてください

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT`` 

シェルスクリプトとして?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.