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

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

説明

dnf install でパッケージ名だけを指定すると、リポジトリの変更によって別のバージョンが選ばれる場合があります。同じ Dockerfile を再ビルドしても、異なるイメージになる可能性があります。

この違いは、予期しない依存関係の変更、互換性の問題、デプロイ失敗につながります。必要なパッケージのバージョンを指定してインストール対象を管理してください。

想定される影響

  • リポジトリの更新でイメージの内容が変わる場合があります。
  • パッケージ変更によってアプリケーションの動作や設定が変わる可能性があります。
  • 再ビルドしたデプロイ用イメージがテスト済みイメージと異なる場合があります。

対処方法

  • dnf install httpd-<version>-<release> の形式で、リポジトリにある正確なバージョンとリリースを指定してください。
  • 複数パッケージをインストールする場合も、それぞれを固定してください。
  • バージョンを更新する前にテストと脆弱性の確認を行ってください。

例

HTTPD_VERSION_RELEASE には、使用する Fedora リポジトリに存在する確認済みのバージョンとリリースを指定してください。latest ベースと全体の update は変更可能なため、1 パッケージの固定だけではイメージ全体の再現性は保証されません。

変更前

dockerfile
FROM fedora:latest
RUN dnf -y update && dnf -y install httpd && dnf clean all
RUN ["dnf", "install", "httpd"]

変更後

dockerfile
FROM fedora:latest
ARG HTTPD_VERSION_RELEASE
RUN test -n "$HTTPD_VERSION_RELEASE" && dnf -y update && dnf -y install "httpd-${HTTPD_VERSION_RELEASE}" && dnf clean all

説明:

  • 変更前: パッケージのバージョンが固定されず、ビルド時期によって変わる可能性があります。
  • 変更後: 確認済みのバージョンを明示し、対象パッケージを管理します。

参考資料