LoginSignup
7
3

More than 5 years have passed since last update.

docker コマンドの --build-arg で設定した値を Dockerfile の CMD で利用する方法

Last updated at Posted at 2019-04-25

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
この図がわかりやすかった。

参考

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3