Docker Engine 25.0 版本資訊

此頁面描述了 Docker Engine 25.0 版本的最新變更、新增功能、已知問題和修復程式。

欲瞭解更多資訊關於

25.0.5

2024-03-19

如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑

安全性

此版本包含 CVE-2024-29018 的安全修復,此漏洞可能導致資料從「內部」網路經由權威 DNS 伺服器外洩。

錯誤修正與增強功能

  • CVE-2024-29018:對於僅連接到「內部」網路的容器,請勿將請求轉發至外部 DNS 伺服器。之前,如果主機的 DNS 伺服器運行在迴路位址(例如 systemd 的 127.0.0.53),請求就會被轉發。 moby/moby#47589

  • 外掛程式:修正當在 UserNS 中執行時掛載 /etc/hosts 的問題。 moby/moby#47588

  • rootless:修正 open /etc/docker/plugins: permission denied 的問題。 moby/moby#47587

  • 修正多個平行 docker build 執行會導致磁碟空間洩漏的問題。 moby/moby#47527

25.0.4

2024-03-07

如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑

錯誤修正與增強功能

  • 還原 Windows 上預設「nat」網路中容器的 DNS 名稱。 moby/moby#47490
  • 修正搭配 --checkpoint 使用時,docker start 失敗的問題。 moby/moby#47466
  • 不對現有的 swarm 網路強制執行新的驗證規則。 moby/moby#47482
  • 還原主機與內部橋接網路上的容器之間的 IP 連線。 moby/moby#47481
  • 修正 v25.0 中引入的一個迴歸問題,該問題導致經典建置器無法新增在非 Linux 作業系統上建立帶有 xattrs 的 tar 歸檔。 moby/moby#47483
  • containerd 映像儲存:修正映像拉取未發出 Pulling fs layer status 的問題。 moby/moby#47484
  • API:為了保持向下相容性,當使用較舊的客戶端 (API 版本 < v1.44) 時,預設情況下,唯讀掛載是非遞迴的。 moby/moby#47393
  • API:如果映像組態中缺少 Created 欄位,則 GET /images/{id}/json 會省略 Created 欄位 (之前是 0001-01-01T00:00:00Z)。 moby/moby#47451
  • API:對於 API 版本 <= 1.43,使用 0001-01-01T00:00:00Z 填充 GET /images/{id}/json 中缺少的 Created 欄位。 moby/moby#47387
  • API:修正一個迴歸問題,該問題導致 API socket 連線失敗會報告 API 版本協商失敗。 moby/moby#47470
  • API:當指定容器級別的 MAC 位址,但 NetworkMode 名稱或 ID 與 NetworkSettings.Networks 中使用的名稱或 ID 不相同時,保留容器建立 API 請求中提供的端點組態。 moby/moby#47510

打包更新

25.0.3

2024-02-06

如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑

錯誤修正與增強功能

  • containerd 映像儲存:修正一個錯誤,即如果內容儲存中找不到清單,docker image history 將會失敗。 moby/moby#47348

  • 確保當容器重新啟動時,不會還原自動生成的 MAC 位址,但會保留已設定的 MAC 位址。 moby/moby#47304

    注意
    • 使用 Docker Engine 25.0.0 版建立的容器可能會有重複的 MAC 位址。必須重新建立這些容器。
    • 使用 Docker Engine 25.0.0 或 25.0.1 版建立並帶有使用者定義 MAC 位址的容器,在使用 Docker Engine 25.0.2 版啟動時會收到新的 MAC 位址。這些容器也必須重新建立。
  • 修正 docker save <image>@<digest> 生成一個不帶有清單的 OCI 歸檔索引的問題。 moby/moby#47294

  • 修正一個錯誤,該錯誤阻止在 RHEL 和 CentOS 7 上以高於 1500 的 MTU 建立橋接網路。 moby/moby#47308, moby/moby#47311

  • 修正一個錯誤,該錯誤導致容器無法透過 internal 網路進行通訊。 moby/moby#47303

  • 修正一個錯誤,該錯誤導致 ipv6 守護程式選項的值被忽略。 moby/moby#47310

  • 修正一個錯誤,該錯誤導致嘗試使用摘要修訂安裝拉取時會導致崩潰。 moby/moby#47323

  • 修正託管 containerd 監管程式中潛在的競爭條件。 moby/moby#47313

  • 修正 journald 日誌驅動程式的問題,該問題導致 systemd 255 版無法正確追蹤容器日誌。 moby/moby#47243

  • seccomp:更新內建的 seccomp 設定檔,以包含核心 v5.17 - v6.7 中新增的系統呼叫,使設定檔與 containerd 使用的設定檔對齊。 moby/moby#47341

  • Windows:修正當建置的映像基於比主機舊的 Windows 版本時,快取未被使用的問題。 moby/moby#47307, moby/moby#47337

打包更新

25.0.2

2024-01-31

如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑

安全性

此版本包含影響 Docker Engine 及其元件的以下 CVE 的安全修復。

CVE元件修復版本嚴重性
CVE-2024-21626runc1.1.12高,CVSS 8.6
CVE-2024-23651BuildKit1.12.5高,CVSS 8.7
CVE-2024-23652BuildKit1.12.5高,CVSS 8.7
CVE-2024-23653BuildKit1.12.5高,CVSS 7.7
CVE-2024-23650BuildKit1.12.5中,CVSS 5.5
CVE-2024-24557Docker Engine25.0.2中,CVSS 6.9

上述漏洞的潛在影響包括

  • 未經授權存取主機檔案系統
  • 破壞建置快取的完整性
  • 就 CVE-2024-21626 而言,可能導致完全容器逃逸的情況

有關此版本中解決的安全問題的更多資訊,請參閱部落格文章。有關每個漏洞的詳細資訊,請參閱相關的安全公告

打包更新

25.0.1

2024-01-23

如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑

錯誤修正與增強功能

  • API:修正升級到 Docker Engine v25.0 之前建立的帶有無效網路組態的容器,其 HTTP 狀態碼不正確的問題。 moby/moby#47159
  • 確保當容器停止並重新啟動時,會重新生成基於容器 IP 位址的 MAC 位址,以防生成的 IP/MAC 位址已被重複使用。 moby/moby#47171
  • 修正當未透過組態設定時,host-gateway-ip 在建置期間不起作用的問題。 moby/moby#47192
  • 修正一個阻止容器重新命名兩次的錯誤。 moby/moby#47196
  • 修正一個問題,該問題導致容器在檢查時,其短 ID 被添加到其網路別名中。 moby/moby#47182
  • 修正偵測遠端建置上下文是否為 Git 儲存庫的問題。 moby/moby#47136
  • 修正 OCI 清單中圖層順序的問題。 moby/moby#47150
  • 修正傳遞 addrip 掛載選項時的磁碟區掛載錯誤。 moby/moby#47185
  • 改進與因命名空間不正確的屬性名稱而無法設定的擴充屬性相關的錯誤訊息。 moby/moby#47178
  • Swarm:修正 start_interval 未傳遞給容器組態的問題。 moby/moby#47163

打包更新

25.0.0

2024-01-19

如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑

注意

在早期版本的 Docker Engine 中,遞迴掛載(子掛載)總是會以可寫方式掛載,即使指定了唯讀掛載。此行為在 v25.0.0 版中已更改,適用於運行在核心版本 5.12 或更高版本的主機。現在,唯讀綁定掛載預設是遞迴唯讀的

若要獲得與早期版本相同的行為,您可以為 --mount 旗標指定 bind-recursive 選項。

$ docker run --mount type=bind,src=SRC,dst=DST,readonly,bind-recursive=writable IMAGE

此選項不支援 -v--volume 旗標。更多資訊請參閱遞迴掛載

新增功能

  • 守護程式現在使用 systemd 的預設 LimitNOFILE。在 Docker Engine 的早期版本中,此限制設定為 infinity。這會導致與近期 systemd 版本相關的問題,其中硬限制增加,導致根據 ulimit 調整其行為的程式消耗大量記憶體。 moby/moby#45534

    新設定使容器的行為與主機上運行的程式相同,但可能導致基於軟限制做出不正確假設的程式行為不當。若要獲得先前的行為,您可以設定 LimitNOFILE=1048576

    此變更目前僅影響使用 BuildKit 搭配 docker 驅動程式時,使用 docker build 建立的建置容器。未來版本的 containerd 也將使用此限制,這將導致此行為影響所有容器,而不僅僅是建置容器。

    如果您在 systemd v240 或更高版本中遇到較高 ulimit 的問題,請考慮新增系統 drop-inoverride 檔案來配置您的設定的 ulimit 設定。 Flatcar Container Linux 文件中有一篇很棒的文章詳細介紹了此主題。

  • 新增 OpenTelemetry 追蹤。 moby/moby#45652, moby/moby#45579

  • 新增對 Linux 下 CDI 裝置的支援。 moby/moby#45134, docker/cli#4510, moby/moby#46004

  • 新增一個額外間隔,供容器啟動期間的健康檢查使用。 moby/moby#40894, docker/cli#4405, moby/moby#45965

  • dockerd 新增 --log-format 旗標,以控制日誌格式:text (預設) 或 JSON。 moby/moby#45737

  • 新增對遞迴唯讀掛載的支援。 moby/moby#45278, moby/moby#46037

  • 新增使用 docker image ls --filter=until=<timestamp> 根據時間戳記過濾映像的支援。 moby/moby#46577

錯誤修正與增強功能

  • API:修正 ValidateRestartPolicy 中無效策略的錯誤訊息。 moby/moby#46352
  • API:更新 /info 端點以使用 singleflight。 moby/moby#45847
  • 新增當使用 -f 指定 Dockerfile 檔案名稱,同時也使用 stdin 時的錯誤訊息。 docker/cli#4346
  • 新增對 --network 長格式中 mac-addresslink-local-ip 欄位的支援。 docker/cli#4419
  • 新增對 docker container createdocker run 中指定多個 --network 旗標的支援。 moby/moby#45906
  • 當指定 IPv6 子網時,自動在網路上啟用 IPv6。 moby/moby#46455
  • 新增對 IPv6 傳輸上的疊加網路的支援。 moby/moby#46790
  • 組態重新載入現在更加穩固:如果在組態重新載入過程中出現錯誤,則不會應用任何組態變更。 moby/moby#43980
  • 即時還原:帶有自動移除 (docker run --rm) 的容器在引擎重新啟動時不再被強制移除。 moby/moby#46857
  • 即時還原:即時還原的容器在守護程式重新啟動時,將獲得另一個健康檢查啟動週期。 moby/moby#47051
  • 容器健康狀態沖寫到磁碟的頻率降低,減少快閃儲存的磨損。 moby/moby#47044
  • 確保網路名稱是唯一的。 moby/moby#46251
  • 確保 overlay2 層元資料是正確的。 moby/moby#46471
  • 修正映像拉取時的 Downloading 進度訊息。 moby/moby#46515
  • 修正 NetworkConnectContainerCreate 的問題,改進資料驗證,並一次性返回所有驗證錯誤。 moby/moby#46183
  • 修正當啟用 IPv6 和 ip6tables 時,com.docker.network.host_ipv4 選項的問題。 moby/moby#46446
  • 修正當 containerd 停止時守護程式的 cleanupContainer 問題。 moby/moby#46213
  • 修正 libnetwork 錯誤返回不正確 HTTP 狀態碼的問題。 moby/moby#46146
  • 修正 images/json API 過濾器和映像列表的各種問題。 moby/moby#46034
  • CIFS 磁碟區現在正確解析 FQDN。 moby/moby#46863
  • 改進 userland-proxy-path 守護程式組態選項的驗證。驗證現在在守護程式啟動時進行,而不是在啟動帶有連接埠映射的容器時產生錯誤。 moby/moby#47000
  • 當網路模式為短網路 ID 時,設定容器介面的 MAC 位址。 moby/moby#46406
  • 在建置輸出中顯示之前,對未使用的建置參數進行排序。 moby/moby#45917
  • docker image save tarball 輸出現在符合 OCI 標準。 moby/moby#44598
  • 守護程式不再將 ACCEPT 規則附加到加密疊加網路的 INPUT iptables 鏈的末尾。根據防火牆組態,可能需要一個規則來允許傳入的加密疊加網路流量。 moby/moby#45280
  • 將帶有擴充屬性的層解包到不相容的檔案系統時,現在將會失敗,而不是靜默丟棄擴充屬性。 moby/moby#45464
  • 將守護程式 MTU 選項更新為 BridgeConfig,並在 Windows 上顯示警告。 moby/moby#45887
  • 建立網路時驗證 IPAM 組態。自動修復在此版本之前建立的網路中 --ip-range 大於 --subnet 的問題。 moby/moby#45759
  • 僅連接到內部網路的容器現在將沒有預設路由設定,使 connect 系統呼叫快速失敗。 moby/moby#46603
  • containerd 映像儲存:新增 pushpullsave 的映像事件。 moby/moby#46405
  • containerd 映像儲存:新增拉取舊版 schema1 映像的支援。 moby/moby#46513
  • containerd 映像儲存:新增推送所有標籤的支援。 moby/moby#46485
  • containerd 映像儲存:新增對註冊表權杖的支援。 moby/moby#46475
  • containerd 映像儲存:新增顯示使用映像的容器數量的支援。 moby/moby#46511
  • containerd 映像儲存:修正與 ONBUILDMAINTAINERHEALTHCHECK Dockerfile 指令相關的錯誤。 moby/moby#46313
  • containerd 映像儲存:修正 Pulling from 進度訊息。 moby/moby#46494
  • containerd 映像儲存:新增使用帶有 sha256: 前綴的截斷 ID 參考映像的支援。 moby/moby#46435
  • containerd 映像儲存:修正 docker images 預設顯示中間層的問題。 moby/moby#46423
  • containerd 映像儲存:修正取得映像時檢查指定平台是否存在的問題。 moby/moby#46495
  • containerd 映像儲存:修正使用經典建置器時,使用多個 ADDCOPY 指令時的錯誤。 moby/moby#46383
  • containerd 映像儲存:修正匯入映像時的堆疊溢位錯誤。 moby/moby#46418
  • containerd 映像儲存:改進 docker pull 進度輸出。 moby/moby#46412
  • containerd 映像儲存:推送映像後,列印標籤、摘要和大小。 moby/moby#46384
  • containerd 映像儲存:移除 UpdateConfig 中的崩潰。 moby/moby#46433
  • containerd 映像儲存:當映像標籤類似摘要時,返回錯誤。 moby/moby#46492
  • containerd 映像儲存:docker image ls 現在顯示正確的映像建立時間和日期。 moby/moby#46719
  • containerd 映像儲存:修正處理使用者命名空間設定的問題。 moby/moby#46375
  • containerd 映像儲存:新增拉取所有標籤 (docker pull -a) 的支援。 moby/moby#46618
  • containerd 映像儲存:使用映像參考中的網域名稱作為預設註冊表驗證網域。 moby/moby#46779

打包更新

已移除

已棄用

  • 棄用 1.24 版之前的 API 版本。 棄用通知
  • 棄用 docker searchIsAutomated 欄位和 is-automated 過濾器。 棄用通知
  • API:棄用 /images/{id}/json (docker image inspect) 的 ContainerContainerConfig 屬性。 moby/moby#46939

已知限制

tar 檔案的擴充屬性

在此版本中,處理 tar 歸檔的程式碼已更改為更嚴格,並在未能寫入擴充屬性 (xattr) 時產生錯誤。macOS 的 tar 實作預設會在建立 tar 檔案時產生額外的擴充屬性。這些屬性前綴不是有效的 Linux xattr 命名空間前綴,這會導致 Docker 嘗試處理這些檔案時發生錯誤。例如,如果您嘗試使用帶有 ADD Dockerfile 指令的 tar 檔案,您可能會看到類似以下的錯誤訊息

failed to solve: lsetxattr /sftp_key.ppk: operation not supported

擴充屬性驗證相關的錯誤訊息已在 v25.0.1 中改進以包含更多上下文,但 Docker 無法處理檔案的限制仍然存在。使用 macOS tar 搭配預設參數建立的 tar 檔案,當與 Docker 一起使用時將會產生錯誤。

作為權宜之計,如果您需要在 macOS 上使用 Docker 產生的 tar 檔案,您可以選擇以下任一方法:

  • 使用 macOS tar 命令的 --no-xattr 旗標來去除所有擴充屬性。如果您想保留擴充屬性,這不是一個推薦的選項。

  • 在 macOS 上安裝並使用 gnu-tar 來建立 tarball,而不是預設的 tar 實作。要使用 Homebrew 安裝 gnu-tar

    $ brew install gnu-tar
    

    安裝後,將 gnu-tar 二進位檔添加到您的 PATH 中,例如透過更新您的 .zshrc 檔案:

    $ echo 'PATH="/opt/homebrew/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zshrc
    $ source ~/.zshrc
    
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.