關於 Docker 映像 CVE 修補與預防

最後更新: 2026-05-04 20:35:38 +0800 CST
原文以英文撰寫。您正在閱讀AI翻譯版本。

TL;DR:不論你的基底映像看起來多麼權威:

  1. 務必確認映像已正確設定並啟用上游安全更新來源。
  2. 在最終業務映像中,務必加入 RUN apt-get update && apt-get upgrade -y(或等價指令)。
  3. 務必每週或每月排程你自己的重建流程。

背景 #

  1. Docker 官方映像(DOI)的唯一事實來源是 https://github.com/docker-library/official-images 的 master 分支。他們使用一種稱為「Library definition files」的格式,定義哪些倉庫中的哪些標籤應被主動重建,以及對應 Dockerfile 的位置(git 倉庫 URL 與 commit ID)。這些 repo:tag 被稱為目前維護中的映像。
  2. https://doi-janky.infosiftr.net/ 上的 Jenkins 工作會分析所有 DOI 的 Dockerfile,產生 DOI 之間的最新相依關係,並寫入 https://github.com/docker-library/meta
  3. 根據這些中繼資料,每次 DOI Dockerfile 的 PR 被合併時,都會在 https://doi-janky.infosiftr.net/ 觸發其所有下游 DOI(即 FROM 它的映像)重建並推送到 Docker Hub。
    • 不保證會有定期、無條件重建。

觀察 #

  1. Docker 公司的 DOI 不會在 Dockerfile 中執行 RUN apt upgrade(或等價指令),其他 DOI 供應方也沒有被要求這麼做。
  2. 即使某個 DOI 供應方在 Dockerfile 中有作業系統升級步驟,若沒有定期、無條件重建,安全修補(若有)仍不會被安裝。
  3. 部分 DOI 使用的發行版預設關閉了安全更新來源。可參考:docker run --rm mysql:9.6.0 tail /etc/yum.repos.d/oracle-linux-ol9.repo

因此,目前維護中的 DOI 並不保證在建置當下是無 CVE 的。也因此,一次「無變更重建」(未包含 RUN apt upgrade 或等價指令)不會修補任何問題。

參考資料: