dockerfile の exec 形式の CMD
で環境変数を使用する方法を探しています。
Dockerfile
1CMD hoge --port $PORT
の意味合いとなるような記述を
Dockerfile
1CMD ["hoge","--port","$PORT"]
のように記述したいのですが、環境変数を展開することができません。
exec 形式がシェルを呼び出さないためと認識していますが、うまい方法があったりするのでしょうか?
背景
ざっくりと言ってしまうと、既存で動作している docker image を heroku に持っていきたいと考えたためです。
元の image では、ENTRYPOINT
に exec 形式で起動コマンドが記述されていたのですが、heroku に移すにあたって、CMD
へ変更、かつport
オプションが必要であることがわかりました。
(port
オプションを与えないと、heroku 指定以外の固定ポートで立ち上がるため、crush してしまうようで、オプションで$PORT
を指定してやる必要があるようです。)
ワークアラウンドとしては、exec 形式ではなく、シェル形式を使用することが一般的なようなので、そちらが本命なのですが、別の問題があって exec 形式の方法も捨てきれていません。
ご存知またはヒントになりそうな情報をお持ちの方、よろしくおねがいします。
(余談)
exec 形式ってドキュメント内で連呼されているんですけど、一般的な呼称なのでしょうか?配列で与えられた値を連結させて実行させるものと適当に読み替えて設定していますが、もし仕様が記述されている箇所があれば教えていただけると助かります。
指摘を受けての追記
申し訳ない。重要な情報が漏れていました^^;
ワークアラウンドとしては、exec 形式ではなく、シェル形式を使用することが一般的なようなので、そちらが本命なのですが、別の問題があって exec 形式の方法も捨てきれていません。
シェルを通すと発生する問題があり、現在切り分けているところです。
そちらが本命なのですが、もし、シェルを通さず、環境変数を展開できるような仕組みがあればと思い質問しました。
よろしくおねがいします。
シェルを通すこと発生する問題の切り分け状況
Dockerfile のENTRYPOINT
を削除して、CMD
へ記述変更していたのですが、別の層で定義したENTRYPOINT
が浮かび上がっていました。
気がつくのが遅れ、大回りをしてしまいましたが、シェルを通すことの問題は解決の目処が付きました。ただ、思っていたよりport
の指定がめんどくさい仕様になっているので、heroku での動作は諦めるかもしれません^^;
回答1件
あなたの回答
tips
プレビュー