Carpe Diem

備忘録

Dockerfile で cd が効かない

環境

現象

Dockerfile に

RUN cd /hoge/fuga
RUN ./piyo

といった形で実行したところ「piyo なんてファイルはありません」と怒られた。

原因

Docker のビルドでは Dockerfile の各命令ごとにコンテナを作るため、
デフォルトだと各命令時のカレントディレクトリは常に「/」になる

解決策1

WORKDIR /hoge/fuga
RUN ./piyo

のように、cd の代わりに WORKDIR を使います。
WORKDIR を使うと、それ以降の命令は全てそのフォルダ内で実行されることになります。

解決策2

RUN cd /hoge/fuga && ./piyo

のように1行に命令をまとめてしまえば大丈夫です。
長くなってしまった場合は

RUN cd /hoge/fuga && \
  ./piyo

のように「\」を使うと見やすくなります。

ソース

docker imageを作る際に"cd"できなかった