Docker 初心者のメモ書きです。
tl;dr
- ENV で環境変数に設定する。
詳細
- Dockerfile 内で コマンドで渡された引数 ARG は Build 時のみ参照可能で、実行時には参照できない。
- 実行時には参照するために、渡した引数を ENV で環境変数へ設定する
docker build --build-arg HOGE=${hoge}
# HOGE変数のデフォルト値の設定
ARG HOGE="default-value"
# HOGE変数を環境変数に設定
ENV HOGE ${HOGE}
# 実行環境で HOGE を参照
CMD echo ${HOGE}
ハマったところ
CMD []
の実行形式だと変数が展開されない。下の例。
CMD ['echo', '${HOGE}']
# 実行時
# > HOGE
ドキュメントにもはっきりと書かれていました。
シェル 形式と異なり、 exec 形式はコマンド・シェルを呼び出しません。つまり、通常のシェルによる処理が行われません。例えば CMD [ "echo", "$HOME" ] は $HOME の変数展開を行いません。シェルによる処理を行いたい場合は、 シェル 形式を使うか、あるいはシェルを直接使います。例: CMD [ "sh", "-c", "echo", "$HOME" ] 。
RUN じゃダメなの?
RUN
だと変数展開できて CMD
だと展開できないのなら RUN
でいいじゃん。と思ったのですが、こちらの記事に違いが書いてありました。
https://qiita.com/YusukeHigaki/items/044164837daa5e845d50
この図がわかりやすかった。
参考