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

apk add でパッケージのバージョンを指定しないと、Docker のビルド結果が変わる可能性があります。

説明

apk add py3-pip のようにバージョンを指定しないと、Alpine リポジトリの変更によって別のバージョンがインストールされる場合があります。同じ Dockerfile でもビルド時期によって異なるイメージになる可能性があります。

本番イメージの再現性は、原因調査やロールバックに役立ちます。apk add package=version の形式でバージョンを指定し、予期しない変更を減らしてください。

想定される影響

  • リポジトリの変更で別のパッケージバージョンが選ばれる場合があります。
  • 依存関係の変更によってアプリケーションの動作が変わる可能性があります。
  • 再ビルドしたデプロイ用イメージがテスト済みイメージと異なる場合があります。

対処方法

  • apk add package=version の形式でバージョンを指定してください。
  • 複数パッケージを一度にインストールする場合も、それぞれを固定してください。
  • 更新前にテストと脆弱性の確認を行ってください。

例

同じサポート対象の Alpine 環境で使うインストール命令の抜粋です。PIP_APK_VERSION に、そのリポジトリで提供される確認済みのバージョンと -r リリースを指定してください。固定したパッケージがリポジトリから削除されるとインストールが失敗するため、必要なパッケージを確保する方法も計画してください。

変更前

dockerfile
RUN apk add --update py3-pip

変更後

dockerfile
ARG PIP_APK_VERSION
RUN test -n "$PIP_APK_VERSION" && apk add --update "py3-pip=${PIP_APK_VERSION}"

説明:

  • 変更前: バージョンを指定していないため、ビルド結果が変わる可能性があります。
  • 変更後: バージョンを明示し、イメージに入るパッケージを管理します。

参考資料