DockerfileのCMDスタンザで環境変数を使用できますか?
私はこのようなことをしたい:
CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]
$ MEMCACHE_11211_TCP_ *は、docker run
コマンドの--linkパラメーターを含めることで自動的に設定されます。また、$ ARGは、実行時にユーザーが設定できるようになります。「-e」パラメーターが設定されますか?
これは私には機能していないようです。たとえば、文字列「$ ARG」を文字通り通り抜けているようです。
この答えは少し遅いかもしれません。ただし、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
CMD ["sh", "-c", "echo ${MY_HOME}"]
Sffitsからの回答 here 。
両方のアンディはそれを正しかった。 json構文はエントリポイントをバイパスします。例のようにCMDを使用すると、デフォルトのエントリポイントへの引数と見なされます:/bin/sh -c
これは環境変数を解釈します。
いずれの場合も、DockerはCMDの変数を評価しません。前者では、コマンドは直接呼び出されるため、何も解釈されません。後者では、変数はsh
によって解釈されます。
想定動作する方法について話すことはできませんが、これをシェルスクリプトとして呼び出した場合、たとえばCMD runmyserver.sh
、その後、シェル変数の解釈は、CMDが実際に実行されるまで延期されます。
だから、試してください
myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``
シェルスクリプトとして?