Docker Engine 25.0 版本資訊
此頁面描述了 Docker Engine 25.0 版本的最新變更、新增功能、已知問題和修復程式。
欲瞭解更多資訊關於
- 已棄用和已移除的功能,請參閱 已棄用的 Engine 功能。
- Engine API 的變更,請參閱 Engine API 版本歷史記錄。
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
打包更新
- 將 Go 執行環境升級到 1.21.8。 moby/moby#47503
- 將 RootlessKit 升級到 v2.0.2。 moby/moby#47508
- 將 Compose 升級到 v2.24.7。 docker/docker-ce-packaging#998
- 將 Buildx 升級到 v0.13.0。 docker/docker-ce-packaging#997
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#47243seccomp:更新內建的 seccomp 設定檔,以包含核心 v5.17 - v6.7 中新增的系統呼叫,使設定檔與 containerd 使用的設定檔對齊。 moby/moby#47341
Windows:修正當建置的映像基於比主機舊的 Windows 版本時,快取未被使用的問題。 moby/moby#47307, moby/moby#47337
打包更新
- 移除對 Ubuntu Lunar (23.04) 的支援。 docker/ce-packaging#986
25.0.2
2024-01-31如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
安全性
此版本包含影響 Docker Engine 及其元件的以下 CVE 的安全修復。
| CVE | 元件 | 修復版本 | 嚴重性 |
|---|---|---|---|
| CVE-2024-21626 | runc | 1.1.12 | 高,CVSS 8.6 |
| CVE-2024-23651 | BuildKit | 1.12.5 | 高,CVSS 8.7 |
| CVE-2024-23652 | BuildKit | 1.12.5 | 高,CVSS 8.7 |
| CVE-2024-23653 | BuildKit | 1.12.5 | 高,CVSS 7.7 |
| CVE-2024-23650 | BuildKit | 1.12.5 | 中,CVSS 5.5 |
| CVE-2024-24557 | Docker Engine | 25.0.2 | 中,CVSS 6.9 |
上述漏洞的潛在影響包括
- 未經授權存取主機檔案系統
- 破壞建置快取的完整性
- 就 CVE-2024-21626 而言,可能導致完全容器逃逸的情況
有關此版本中解決的安全問題的更多資訊,請參閱部落格文章。有關每個漏洞的詳細資訊,請參閱相關的安全公告
打包更新
- 將 containerd 升級到 v1.6.28。
- 將 containerd 升級到 v1.7.13 (僅限靜態二進位檔)。 moby/moby#47280
- 將 runc 升級到 v1.1.12。 moby/moby#47269
- 將 Compose 升級到 v2.24.5。 docker/docker-ce-packaging#985
- 將 BuildKit 升級到 v0.12.5。 moby/moby#47273
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
- 修正傳遞
addr或ip掛載選項時的磁碟區掛載錯誤。 moby/moby#47185 - 改進與因命名空間不正確的屬性名稱而無法設定的擴充屬性相關的錯誤訊息。 moby/moby#47178
- Swarm:修正
start_interval未傳遞給容器組態的問題。 moby/moby#47163
打包更新
- 將 Compose 升級到
2.24.2。 docker/docker-ce-packaging#981
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-in或override檔案來配置您的設定的 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-address和link-local-ip欄位的支援。 docker/cli#4419 - 新增對
docker container create和docker 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 - 修正
NetworkConnect和ContainerCreate的問題,改進資料驗證,並一次性返回所有驗證錯誤。 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 savetarball 輸出現在符合 OCI 標準。 moby/moby#44598- 守護程式不再將
ACCEPT規則附加到加密疊加網路的INPUTiptables 鏈的末尾。根據防火牆組態,可能需要一個規則來允許傳入的加密疊加網路流量。 moby/moby#45280 - 將帶有擴充屬性的層解包到不相容的檔案系統時,現在將會失敗,而不是靜默丟棄擴充屬性。 moby/moby#45464
- 將守護程式 MTU 選項更新為 BridgeConfig,並在 Windows 上顯示警告。 moby/moby#45887
- 建立網路時驗證 IPAM 組態。自動修復在此版本之前建立的網路中
--ip-range大於--subnet的問題。 moby/moby#45759 - 僅連接到內部網路的容器現在將沒有預設路由設定,使
connect系統呼叫快速失敗。 moby/moby#46603 - containerd 映像儲存:新增
push、pull和save的映像事件。 moby/moby#46405 - containerd 映像儲存:新增拉取舊版 schema1 映像的支援。 moby/moby#46513
- containerd 映像儲存:新增推送所有標籤的支援。 moby/moby#46485
- containerd 映像儲存:新增對註冊表權杖的支援。 moby/moby#46475
- containerd 映像儲存:新增顯示使用映像的容器數量的支援。 moby/moby#46511
- containerd 映像儲存:修正與
ONBUILD、MAINTAINER和HEALTHCHECKDockerfile 指令相關的錯誤。 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 映像儲存:修正使用經典建置器時,使用多個
ADD或COPY指令時的錯誤。 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
打包更新
- 將 API 升級到 v1.44。 moby/moby#45468
- 將 Compose 升級到
2.24.1。 docker/docker-ce-packaging#980 - 將 containerd 升級到 v1.7.12 (僅限靜態二進位檔)。 moby/moby#47070
- 將 Go 執行環境升級到 1.21.6。 moby/moby#47053
- 將 runc 升級到 v1.1.11。 moby/moby#47007
- 將 BuildKit 升級到 v0.12.4。 moby/moby#46882
- 將 Buildx 升級到 v0.12.1。 docker/docker-ce-packaging#979
已移除
- API:移除
GET /images/json和GET /images/{id}/json端點的 VirtualSize 欄位。 moby/moby#45469 - 移除已棄用的
devicemapper儲存驅動程式。 moby/moby#43637 - 移除已棄用的協調器選項。 docker/cli#4366
- 移除對 Debian Upstart init 系統的支援。 moby/moby#45548, moby/moby#45551
- 移除
--oom-score-adjust守護程式選項。 moby/moby#45484 - 移除關於已棄用
~/.dockercfg檔案的警告。 docker/cli#4281 - 移除
logentries日誌驅動程式。 moby/moby#46925
已棄用
- 棄用 1.24 版之前的 API 版本。 棄用通知
- 棄用
docker search的IsAutomated欄位和is-automated過濾器。 棄用通知 - API:棄用
/images/{id}/json(docker image inspect) 的Container和ContainerConfig屬性。 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