pip パッケージのバージョンが未固定

Python パッケージのバージョンを指定しないと、Docker のビルド時に含まれるライブラリが変わる可能性があります。

説明

pip install connexion のような命令では、パッケージリポジトリの変更によって別のバージョンを取得する場合があります。シェル形式と JSON exec 形式のどちらの pip・pip3 install でも、実際のパッケージ引数のバージョンを固定してください。

Python パッケージには間接的な依存関係が多く、小さな更新でも動作に影響します。--index-url や --trusted-host などのオプションの値や URL はパッケージ名ではありません。これらのオプションを使う場合も、対象パッケージは package==version で指定してください。

想定される影響

  • ビルドごとに異なる Python パッケージがインストールされる場合があります。
  • 依存関係の変更で実行時エラーが発生する可能性があります。
  • テストと本番でライブラリ構成が異なる場合があります。

対処方法

  • pip install connexion==3.1.0 のようにバージョンを指定してください。
  • 間接依存も含めて確認済みの requirements ファイルと固定バージョンを管理してください。
  • バージョンを更新する前にアプリケーションをテストしてください。

例

以下のバージョンは固定構文の例であり、現在のセキュリティ上の推奨値ではありません。ベースイメージと間接依存も管理し、セキュリティ更新を継続してください。

変更前

dockerfile
FROM python:3.12-slim
RUN pip install connexion
RUN pip3 install requests

変更後

dockerfile
FROM python:3.12-slim
RUN pip install --upgrade pip==24.2 connexion==3.1.0
RUN pip3 install --no-cache-dir requests==2.32.3

説明:

  • 変更前: バージョンが指定されていないため、リポジトリの変更がイメージに反映される場合があります。
  • 変更後: == で直接インストールするバージョンを指定します。この命令だけでは、すべての間接依存は固定されません。

参考資料