Docker4 択難易度 標準

状況

Web アプリの Dockerfile をレビューしている。本番ではホストのアップロード用ディレクトリをバインドマウントして動かす。

安全面で最も優先して指摘すべき点は?

FROM python:3.13-slimWORKDIR /appCOPY . .RUN pip install --no-cache-dir -r requirements.txtCMD ["python", "app.py"]

正答

  1. --no-cache-dir を付けるとパッケージが壊れるので、外すべき
  2. slim ではなく alpine にすれば、それだけで脆弱性は無くなる
  3. USER の指定が無く root で動く。一般ユーザーを作って USER で切り替える
  4. CMD より前に EXPOSE を書かないと、ポートを公開できない

解説

Dockerfile に USER が無いと、コンテナのプロセスは root で動く。アプリの脆弱性を突かれると、攻撃者はコンテナ内で root として動けるうえ、バインドマウントしたホストのディレクトリも root の権限で書き換えられ、ホストへの被害につながりやすい。一般ユーザーを作り、USER で切り替えて動かすのが公式のベストプラクティス。--no-cache-dir はイメージを小さくする正しい指定。alpine にしても脆弱性が無くなるわけではない。EXPOSE は記録のための命令で、公開は実行時の -p で行う。

参考: docs.docker.com

dockerfilerootuser

この問題を含む Docker のテストを制限時間つきで解く

Dockerクイズへ