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