LoginSignup
11
4

More than 5 years have passed since last update.

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

Posted at

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"

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

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4