1. ホーム
  2. docker

[解決済み] ドッカーENVとRUNエクスポートの比較

2022-08-11 11:24:26

質問

例えば、以下のコマンドを組み合わせたいとします。

RUN command_1
ENV FOO bar
RUN command_2

RUN command_1 && export FOO=bar && command_2

で変数を設定するのはどうなんだろうと思っていたのですが RUN export 対して ENV は等価であった。

つまり、Dockerfileの中でこれらのコマンドの違いはあるのでしょうか?

ENV FOO bar

RUN export FOO=bar

どのように解決するのですか?

図にあるように 問題684 , export はイメージ間で持続しません。(各 Dockerfile ディレクティブは中間コンテナを生成し、中間イメージにコミットすることを忘れないでください: そのイメージはエクスポートされた値を保持しません)

ENV になります。

で設定した環境変数が ENV によって設定された環境変数は、 結果のイメージからコンテナが実行されたときに持続されます。

値を表示するには docker inspect を使って表示し docker run --env <key>=<value> .

でそれを図解していたのが問題。

RUN export PATH=$PATH:/foo/bar # from directly in builder

私の場合 docker run [img] bash -c 'echo $PATH' を含むことはありません。 /foo/bar .

試す

を含む新しいdockerfileを作成します。

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

次にビルドします。最後のステップの出力は

Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
 ---> Running in eb66196b238d
foofoo  bazbaz

見ることができます。

  • FOO は中間コンテナを通して持続します。 ENV キーワードのおかげで、中間コンテナを通して持続します。
  • BAR は次のステップで持続しません。 export コマンドのためです。
  • BAZ は、同じコンテナ上で変数が使われているため、正しく表示されます。