web-dev-qa-db-ja.com

RUNコマンドの文字列内のDockerfile ARG置換

私のDockerfileでは、文字列の変数を置き換えたいと思います。

ARG w=world
RUN echo 'Hello $w'

出力をHello worldにしたいのですが、実際の出力はHello $wです。

10
lörf

RUN echo "Hello $w" 正常に動作します。 ARGは二重引用符で囲まれて解決されます。

1
lörf

Dockerは、RUNコマンドのARG値を展開しません。代わりに、ARGを環境変数として挿入します。シェル自体が変数を展開し、私が使用したすべてのLinuxシェルの動作は、引用符のタイプに基づいて異なります。

単一引用符はシェルに何も展開しないように指示し、単一引用符とエスケープ文字のみをエスケープする必要があります。二重引用符には、他の多くのエスケープ文字とともに変数展開が含まれています。詳細については、シェルのmanページを参照してください。

したがって、すでに見つけた解決策は次のとおりです。

RUN echo "Hello $w"
1
BMitch