小ネタ : Dockerfile内でARGをクォートで囲むと展開ができない

問題

Dockerfile内で以下のように、 ENV 内で呼び出しの ARG が展開されない。

Dockerfile

FROM centos:latest

ARG FOO=foo
ENV OPTS='foo=${FOO} \
 bar=bar \
 hoge=hoge'

環境変数の確認結果

# env | grep ^OPTS
OPTS=foo=${FOO}  bar=bar  hoge=hoge

原因と対処方法

  • Bashでは変数をシングルクォートで囲むと文字列として認識される
  • 変数を展開させたい場合は、代わりにダブルクォートを使用する

Dockerfile

$ cat Dockerfile 
FROM centos:latest

ARG FOO=foo
ENV OPTS="foo=${FOO} \
 bar=bar \
 hoge=hoge"

環境変数の確認結果

# env | grep ^OPTS
OPTS=foo=foo  bar=bar  hoge=hoge

参考:

/* https://sunrise033.com/entry/hatena-blog-how-to-hierarchicalize-categories */