Help us understand the problem. What is going on with this article?

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

More than 3 years have 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"

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away