ENV
dockerfile

Dockerfile内でのワークディレクトリ参照

More than 1 year has passed since last update.

Dockerfile内でワーキングディレクトリをenvで変数に入れたかったですが、うまくいきませんでした。
DockerfileのRUNコマンド内では$PWDや$HOMEっていう事前に定義された変数があるのですが、
これをENVコマンドやADDコマンドに渡しても空文字で解釈されてしまいます。

Dockerfile
WORKDIR /app

# PWDを使って変数代入
ENV AA $PWD
RUN echo $AA
RUN echo $PWD

# HOMEを使って変数代入
ENV BB $HOME
RUN echo $BB
RUN echo $HOME

結果:

Step 3/16 : ENV AA $PWD # ENVで代入しても
Step 4/16 : RUN echo $AA
# 何も表示されない
Step 5/16 : RUN echo $PWD
/app # RUNコマンド内なら解釈される

Step 6/16 : ENV BB $HOME # ENVで代入しても
Step 7/16 : RUN echo $BB
# 何も表示されない # RUNコマンド内なら解釈される
Step 8/16 : RUN echo $HOME
/root

こちらでも質問されてました。
$PWD is not set in ENV instruction in a Dockerfile

PWDとかの変数は特別な変数でRUNとかのようにDockerfile外?で実行されるまでは代入されていない、とのこと。
なのでPWD指定するくらいなら最初からWORKDIRで移動する先をENVで別変数で持っておく必要があるみたいです。

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"

もっといい方法あるかもしれませんが、一旦これで対処しようかと思います。
他にも関連する特殊な変数が存在するかもしれません。