読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

Dockerfile で cd が効かない

Docker

環境

現象

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"できなかった