作業ディレクトリしたい(WORKDIR

1WORKDIR /app

WORKDIRで作業ディレクトリを変更できます。 Dockerfile内で実行されるコマンドの起点になります。 指定したディレクトリは自動で作成されます。

絶対パスで指定する

1FROM python:3.12-slim
2WORKDIR /app
3COPY requirements.txt .
4RUN pip install -r requirements.txt
5COPY . .
6CMD ["python", "main.py"]

/app/work/workspaceなどが一般的に使われます。

作業ディレクトリは基本的に絶対パスで指定します。 複数のWORKDIR指定があっても各ステージで独立した 作業ディレクトリが設定されます。

マウントポイント(VOLUME)とは別のディレクトリを使うことをオススメします。

相対パスで指定する

1WORKDIR /app
2WORKDIR subdir
3# 作業ディレクトリは /app/subdir になる

相対パスは親ディレクトリに依存します。 複数のWORKDIRを指定するとパスが連結されます。 コンテナ構築の過程で作業ディレクトリが意図せず変わる可能性があるので、 明確性を保つため、絶対パスの使用を推奨します

避けるべきディレクトリ名

以下のディレクトリを WORKDIR として使用することは避けてください。

  • システムディレクトリ: /(ルート)、/bin/dev/run/sys など

    • 理由:Linuxシステムの正常動作に必要なディレクトリを汚染する恐れ

  • ユーザーホームディレクトリ: /root/home など

    • 理由:権限やセキュリティの問題が生じる可能性がある

  • 一時ディレクトリ: /tmp/var/tmp など

    • 理由:コンテナ再起動時にファイルが削除される可能性がある

WORKDIRの影響範囲

WORKDIR を設定すると、その後の COPYRUNCMDENTRYPOINTADD など全てのコマンドがそのディレクトリで実行されます。 マルチステージビルドでも、各ステージで独立して WORKDIR を設定できます。

リファレンス