Dockerfileは次のように始まります:
FROM ubuntu:16.04
WORKDIR /some/path
COPY . .
ENV PYTHONUSERBASE=$PWD/pyenv PATH=$PWD/pyenv/bin:$PATH
RUN echo "PWD is: $PWD"
RUN echo "PYENV is: $PYTHONUSERBASE"
比較として、実行時に設定されていない$PWD
(または${PWD}
)が正しく展開さdocker build
れていることがわかりました$PATH
。
また、$PWD
中にRUN
問題がない(これは、印刷/some/path
、この場合)
したがって、指定されたDockerfileの出力は次のようになります。
PWD is: /some/path
PYENV is: /pyenv
なぜ$PWD
そんなに特別なのか誰かに教えてもらえますか?の振る舞いに関係しているのではないかと思いますがWORKDIR
、それについてはわかりません。
PWDは、シェル内に設定される特別な変数です。docker RUNが何かを実行すると、このフォームsh -c 'something'
でそれが実行され、ENV命令から事前定義された環境変数が渡されます。ここで、PWDはそのリストにありません(で参照docker inspect <image-id>
)。
ENV命令はシェルを起動しません。画像メタデータのenv変数の現在のリストを追加または更新するだけです。
Dockerfileを次のように記述します。
FROM ubuntu:16.04
ENV APP_PATH=/some/path
WORKDIR $APP_PATH
COPY . .
ENV PYTHONUSERBASE=$APP_PATH/pyenv PATH=$APP_PATH/pyenv/bin:$PATH
RUN echo "PWD is: $PWD"
RUN echo "PYENV is: $PYTHONUSERBASE"
ドキュメントの詳細情報:
WORKDIR命令は、Dockerfileでそれに続くRUN、CMD、ENTRYPOINT、COPY、およびADD命令の作業ディレクトリを設定します。WORKDIRが存在しない場合は、後続のDockerfile命令で使用されていなくても作成されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加