Docker Engine 23.0 發行說明
注意從 Docker Engine 23.0.0 版開始,Buildx 會以獨立套件發佈:
docker-buildx-plugin。在早期版本中,Buildx 包含在docker-ce-cli套件中。當您升級到此版本的 Docker Engine 時,請確保更新所有套件。例如,在 Ubuntu 上$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin有關升級 Docker Engine 的更多詳細資訊,請參閱您作業系統的 Docker Engine 安裝說明。
本頁說明 Docker Engine 23.0 版的最新變更、新增功能、已知問題和修正。
欲瞭解更多資訊關於
- 已棄用和已移除的功能,請參閱 已棄用的 Engine 功能。
- Engine API 的變更,請參閱 Engine API 版本歷史記錄。
從 23.0.0 版發行開始,Docker Engine 不再使用 CalVer 版本控制,而是開始使用 SemVer 版本控制格式。變更版本格式是邁向 Go 模組相容性的一個墊腳石,但儲存庫尚未採用 Go 模組,並且仍然需要使用「+incompatible」版本。未來版本將繼續努力實現 Go 模組相容性。
23.0.6
2023-05-08如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
錯誤修正與增強功能
- 修正 vfs 儲存驅動程式在 NFS 上無法運作的問題。 moby/moby#45465
套件更新
- 將 Go 升級到
1.19.9。 docker/docker-ce-packaging#889、 docker/cli#4254、 moby/moby#45455 - 將
containerd升級到 v1.6.21 - 將
runc升級到 v1.1.7
23.0.5
2023-04-26如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
錯誤修正與增強功能
- 修剪磁碟區時新增
--all/-a選項。 docker/cli#4229 - 為
docker info新增--format=json。 docker/cli#4320 - 修正 AWSLogs 日誌驅動程式的日誌遺失問題。 moby/moby#45350
- 修正 v23.0.4 中引入的一個迴歸問題,即如果提供了 fixed-cidr 設定參數但沒有 bip,dockerd 將拒絕啟動。 moby/moby#45403
- 修正 daemon 啟動期間 libnetwork 中的恐慌問題 moby/moby#45376
- 修正使用
buildx建置映像檔時,「tag」事件未發送的問題。 moby/moby#45410
套件更新
- 將 Compose 升級到
2.17.3。 docker/docker-ce-packaging#883
23.0.4
2023-04-17如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
錯誤修正與增強功能
- 修正 Docker CLI 23.0.0 中的效能迴歸問題 docker/cli#4141。
- 修正
docker cp中的進度指示器未按預期運作的問題 docker/cli#4157。 - 修正
docker compose --file的 shell 補齊功能 docker/cli#4177。 - 修正因
daemon.json中「default-address-pools」處理不正確而導致的錯誤 moby/moby#45246。
套件更新
- 修正 CentOS 9 Stream 缺少套件的問題。
- 將 Go 升級到
1.19.8。 docker/docker-ce-packaging#878、 docker/cli#4164、 moby/moby#45277,其中包含以下問題的修正: CVE-2023-24537、 CVE-2023-24538、 CVE-2023-24534 和 CVE-2023-24536
23.0.3
2023-04-04注意由於 CentOS 9 Stream 的套件儲存庫存在問題,CentOS 9 的套件目前無法使用。CentOS 9 的套件可能會在以後新增,或作為下一個 (23.0.4) 補丁版本的一部分。
錯誤修正與增強功能
- 修正了可能導致 Swarm 加密重疊網路無法兌現其保證的多個問題,解決了 CVE-2023-28841、 CVE-2023-28840 和 CVE-2023-28842。
- 現在,如果核心不支援加密重疊網路,將會報告錯誤。
- 加密重疊網路會立即設定,而不是等待多個節點連接。
- 透過使用
xt_bpf核心模組,加密重疊網路現在可在 Red Hat Enterprise Linux 9 上使用。 - Swarm 重疊網路使用者應檢閱 GHSA-vwm3-crmr-xfxw,以確保沒有發生意外暴露。
套件更新
23.0.2
2023-03-28如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
錯誤修正與增強功能
- 當偵測到啟用 AppArmor 的核心時,完全解決
apparmor_parser缺少檢查的問題。 containerd/containerd#8087、 moby/moby#45043 - 確保從 Git URL 中移除憑證,以產生 BuildKit 建置資訊。修正 CVE-2023-26054。 moby/moby#45110
- 修正 Dockerfile 中
VOLUME行建立的匿名磁碟區被磁碟區修剪排除的問題。 moby/moby#45159 - 修正從 Swarm 節點移除磁碟區時無法正確傳播錯誤的問題。 moby/moby#45155
- 透過停用 mergeop/diffop 優化,暫時解決 BuildKit
COPY --link中的錯誤。 moby/moby#45112 - 當父 Swarm 作業被移除時,正確清理子任務。 moby/swarmkit#3112、 moby/moby#45107
- 修正 Swarm 服務建立邏輯,以便 GenericResource 和非預設網路可以同時使用。 moby/swarmkit#3082、 moby/moby#45107
- 修正 Swarm CSI 支援需要 CSI 外掛程式提供暫存端點才能發佈磁碟區的問題。 moby/swarmkit#3116、 moby/moby#45107
- 修正某些設定中因日誌緩衝而導致的恐慌問題。 containerd/fifo#47、 moby/moby#45051
- 將 REST 到 Swarm gRPC API 轉換層中的錯誤記錄到偵錯級別,以減少冗餘和雜訊。 moby/moby#45016
- 修正當在容器外部使用
systemd-resolved時,使用--dns-opt或--dns-search建立的容器受影響的 DNS 解析問題。 moby/moby#45000 - 修正處理來自容器內部的 DNS 查詢時記錄錯誤時的恐慌問題。 moby/moby#44980
- 透過允許使用者使用
--size=false選項退出大小計算,提高docker ps的速度。 docker/cli#4107 - 將 Bash 補齊支援擴展到所有外掛程式。 docker/cli#4092
- 修正當
cmd.exe設定的特殊環境變數存在時,docker stack deploy在 Windows 上失敗的問題。 docker/cli#4083 - 透過將空映像檔標籤視為與
<none>相同,為未來的 API 版本新增向前相容性。 docker/cli#4065 - 原子性地寫入上下文檔案,大幅降低損壞的可能性,並改進損壞上下文的錯誤訊息。 docker/cli#4063
打包
- 將 Go 升級到
1.19.7。 docker/docker-ce-packaging#857、 docker/cli#4086、 moby/moby#45137 - 將
containerd升級到v1.6.19。 moby/moby#45084、 moby/moby#45099 - 將 Buildx 升級到
v0.10.4。 docker/docker-ce-packaging#855 - 將 Compose 升級到
v2.17.2。 docker/docker-ce-packaging#867
23.0.1
2023-02-09如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
錯誤修正與增強功能
- 修正當核心啟用 AppArmor 但
apparmor_parser不可用時容器無法啟動的問題。 moby/moby#44942 - 修正啟用 BuildKit 並使用內聯快取導致 daemon 崩潰的問題。 moby/moby#44944
- 修正 BuildKit 無法正確載入由先前版本建立的快取層的問題。 moby/moby#44959
- 修正
ipvlan網路在升級之前建立會阻止 daemon 啟動的問題。 moby/moby#44937 - 修正
overlay2儲存驅動程式在不支援的後端檔案系統上初始化時,在metacopy測試中提早失敗的問題。 moby/moby#44922 - 修正
exec退出事件在某些執行時(例如 Kata Containers)被誤解為容器退出的問題。 moby/moby#44892 - 改進 CLI 在收到因 API 在請求中途掛起而導致的截斷 JSON 回應時返回的錯誤訊息。 docker/cli#4004
- 修正嘗試使用 Go 1.20 編譯的
runc執行目錄時,CLI 退出代碼不正確的問題。 docker/cli#4004 - 修正錯誤地將
--device-write-bps的 size 參數作為路徑處理的問題。 docker/cli#4004
打包
- 將
/etc/docker新增至 RPM 和 DEB 套件。 docker/docker-ce-packaging#842- 並非所有使用案例都會受益;如果您依賴此功能,應明確執行
mkdir -p /etc/docker。
- 並非所有使用案例都會受益;如果您依賴此功能,應明確執行
- 將 Compose 升級到
v2.16.0。 docker/docker-ce-packaging#844
23.0.0
2023-02-01如需此版本中所有拉取請求和變更的完整列表,請參閱相關的 GitHub 里程碑
新增功能
- 將 Buildx 和 BuildKit 設定為 Linux 上的預設建置器。 moby/moby#43992
- 將
docker build別名為docker buildx build。 docker/cli#3314 - 透過明確設定
DOCKER_BUILDKIT=0,仍可使用舊版建置器。 - BuildKit 與舊版建置器在處理多階段建置方面存在差異。更多資訊請參閱 多階段建置。
- 將
- 新增支援拉取
zstd壓縮層。 moby/moby#41759、 moby/moby#42862 - 新增支援 Linux 上的替代 OCI 執行時,與 containerd 執行時 v2 API 相容。 moby/moby#43887、 moby/moby#43993
- 新增支援 Windows 上的 containerd
runhcsshim(預設為關閉)。 moby/moby#42089 - 新增
dockerd --validate以檢查 daemon JSON 設定並退出。 moby/moby#42393 - 新增透過旗標或 JSON 設定來配置 daemon HTTP 代理的功能。 moby/moby#42835
- 新增支援 RFC 3021 點對點網路 (IPv4 /31s) 和單一主機 (IPv4 /32s)。對於只有兩個或更少位址的網路,IPAM 將不會保留網路和廣播位址。 moby/moby#42626
- 新增支援在
ipvlan網路驅動程式中設定ipvlan_flag和使用l3sipvlan_mode。 moby/moby#42542 - 新增支援顯示
overlay2儲存驅動程式的metacopy選項值。 moby/moby#43557 - 新增支援使用
IDType://ID語法描述 Windows 裝置。 moby/moby#43368 - 新增
RootlessKit、slirp4netns和VPNKit版本報告。 moby/moby#42330 - 新增 SwarmKit 叢集磁碟區 (CSI) 的實驗性支援。 moby/moby#41982
- CLI:為
docker volume新增叢集磁碟區 (CSI) 選項。 docker/cli#3606 - CLI:為
docker stack新增叢集磁碟區 (CSI) 支援。 docker/cli#3662
- CLI:為
- 新增
docker stack deploy中的 SwarmKit 作業支援。 docker/cli#2907 - 新增
docker stack config命令,以輸出stack deploy使用的合併和插值設定檔。 docker/cli#3544 - 新增一個新的
docker context show命令,用於列印當前上下文的名稱。 docker/cli#3567 - 為所有支援
--format旗標的命令新增--format="{{ json . }}"的簡寫變體--format=json。 docker/cli#2936 - 為
docker create和docker run命令新增--quiet選項,以抑制拉取映像檔時的輸出。 docker/cli#3377 - 為
docker network rm子命令新增--force選項。即使網路不存在,CLI 也會返回 0 退出代碼。對伺服器端移除網路的程序沒有影響。 docker/cli#3547 - 為
docker stop和docker restart新增--signal選項。 docker/cli#3614 - 為
docker-proxy新增-v/--version旗標。 moby/moby#44703 - 當 daemon 在無根模式下運行時,外掛程式現在會從知名的使用者級別路徑中被發現。 moby/moby#44778
- daemon 現在能優雅地處理 JSON 設定檔中常見的替代 JSON 編碼,並報告有用的錯誤。 moby/moby#44777、 moby/moby#44832
- 接受帶有位元組順序標記的 UTF-8。
- 接受帶有位元組順序標記的 UTF-16。
- 無效的 UTF-8 會提早報告並附上易於理解的錯誤訊息。
- 允許透過
docker commit使用STOPSIGNAL。 moby/moby#43369 - 為
awslogs日誌驅動程式新增一個新選項,允許跳過在 CloudWatch 中建立日誌串流。 moby/moby#42132 - 為
awslogs日誌驅動程式新增一個新選項,以指定傳送到 CloudWatch 的日誌格式。 moby/moby#42838 - 為
fluentd日誌驅動程式新增一個新選項,以設定重新連線間隔。 moby/moby#43100 - 為 Go API 用戶端新增選項設定器:
WithTLSClientConfigFromEnv()、WithHostFromEnv()和WithVersionFromEnv()。 moby/moby#42224 - 透過
docker completion子命令新增 shell 命令補齊功能的生成。 docker/cli#3429 - API:為
GET /_ping和HEAD /_ping新增Swarm標頭,允許單次請求偵測 Swarm 支援。 moby/moby#42064 - API:為
POST /containers/{id}/stop和POST /containers/{id}/restart新增signal參數,以設定使用的訊號。 moby/moby#43206 - API:為
POST /containers/create新增CreateMountPoint參數。 moby/moby#43484 - API:為
GET /images/json新增shared-size參數,以啟用映像檔的共用大小計算。 moby/moby#42531 - API:為
GET /system/df新增type參數,以控制計算磁碟使用量時考慮的物件類型。 moby/moby#42559 - systemd:使用 systemd 管理的 containerd,而不是 daemon 管理的 containerd。 moby/moby#42373
- systemd:在
time-set.target之後啟動docker.service。 moby/moby#43107
已移除
- 移除從
~/.dockercfg讀取配置的支援。 docker/cli#2504- 此位置自 1.7.0 版起已棄用。
- 棄用通知
- 移除 daemon 的
-g和--graph選項,改用--data-root。 docker/cli#3739- 這些選項自 17.05 版起已隱藏並棄用。
- 棄用通知
- 移除用戶端結果排序功能,改為依據搜尋 API 返回的順序。 docker/cli#3470
- 從 CLI 移除與已棄用儲存驅動程式相關的警告。警告現在改由 daemon 處理。 docker/cli#3542
- 從
docker version中移除Experimental用戶端欄位。 docker/cli#3543 - 要求明確選擇使用已棄用儲存驅動程式,且升級時不自動選擇它們。 moby/moby#43378
- 移除對不支援
d_type的後端檔案系統上已棄用overlay和overlay2儲存驅動程式的支援。 moby/moby#43472 - 從
overlay2儲存驅動程式中移除已棄用的overrideKernelCheck選項。 moby/moby#44279 棄用通知 - 移除對已棄用的
io.containerd.runtime.v1.linuxOCI 執行時的支援。 moby/moby#43695 - 移除 LCOW (Windows 上的 Linux 容器)。 moby/moby#42451、 moby/moby#42499、 moby/moby#42506、 moby/moby#42511、 moby/moby#42520、 moby/moby#42683、 moby/moby#42684、 moby/moby#42685、 moby/moby#43187
- LCOW 於 17.09 版作為技術預覽引入,並於 20.10 版棄用。
- 棄用通知
- 移除與用於獨立 Swarm 的舊版重疊網路相關的 daemon 選項。
- 從
dockerd移除--cluster-xx選項。 moby/moby#40383 - 移除
host-discovery和具有外部鍵/值儲存的重疊網路。 moby/moby#42247 - 棄用通知
- 從
- 移除已棄用的
arm平台後備。現在,當arm/vY不可用時,--platform linux/arm/vY將返回錯誤,而不是拉取錯誤的映像檔。 moby/moby#44414 - 從 Go 用戶端 API 移除已棄用的
SetCustomHTTPHeaders()、CustomHTTPHeaders()選項設定器。 moby/moby#42694 - 從 Go 用戶端 API 移除已棄用的
WithDialer()選項設定器。 moby/moby#44022- 改用
WithDialContext()。
- 改用
- 移除 daemon 中
opts.QuotedString的實作。該實作已移至 CLI。 moby/moby#43250 - 從 daemon 中的信任金鑰中移除獨立的 daemon ID,並停用信任金鑰的生成。 moby/moby#43555
- API:在 API 版本 >= 1.42 時,從
POST /containers/create中移除已棄用的KernelMemory選項。 moby/moby#43214
已棄用
- 要求 Windows Server RS5 / LTSC 2019 (建置 17763) 作為運行 daemon 的最低要求。 moby/moby#43254
- 在 API 版本 >= 1.42 時棄用
BuilderSize。 moby/moby#42608 - 在 API 版本 >= 1.42 時棄用
BuildCache.Parent,改用新引入的BuildCache.Parents。 moby/moby#43908 - 棄用
pkg/urlutil,將實作移至builder/remotecontext/urlutil。 moby/moby#43477
升級
- 將 Go 升級到
1.19.5。 docker/cli#3958、 moby/moby#44794 - 將
rootlesskit升級到v0.14.4。 moby/moby#42708 - 將
buildkit升級到v0.10.6。 moby/moby#43239 - 將
buildx升級到v0.10.2。 docker/docker-ce-packaging#840 - 將
swarmkit升級到v2.0.0-20230119195359-904c221ac281。 moby/moby#44858 - 將
containerd升級到v1.6.16。 moby/moby#44766、 moby/moby#44769、 moby/moby#44881 - 將
runc升級到v1.1.4。 moby/moby#44039 - 將
hcsshim升級到v0.9.6。 moby/moby#44658 btrfs儲存驅動程式現在依賴 Linux 核心標頭 (>= 4.12),而不是 btrfs-progs 中的標頭。 moby/moby#44776
安全性
- 將容器
hostconfig.json檔案的權限變更為0600(原為0644)。 moby/moby#41620 - 修正
--seccomp-profile不接受unconfined的問題,並將預設 seccomp 設定檔重新命名為builtin。 moby/moby#42481 - 始終以 seccomp 支援進行建置,並移除
seccomp建置標籤。 moby/moby#42501 - 在
riscv64上新增 seccomp 支援。 moby/moby#43553 - 新增支援在 seccomp 設定檔中設定傳遞給
seccomp(2)的旗標。 moby/moby#42648 - 重構 seccomp 類型以重用執行時規範,並新增對
ErrnoRet的支援。 moby/moby#42005 - 在
seccomp設定檔中新增DefaultErrnoRet支援。 moby/moby#42604 - 為預設 seccomp 設定檔新增一個明確的
DefaultErrnoRet欄位,沒有行為變更。 moby/moby#42649 - 在預設 seccomp 設定檔中阻止
AF_VSOCK的socket。 moby/moby#44563 - 在預設 seccomp 設定檔中重新啟用
process_vm_readv和process_vm_writev。 moby/moby#42083 - 將與 PKU 相關的系統呼叫新增到預設 seccomp 設定檔。 moby/moby#43812
- 允許
clock_settime64搭配CAP_SYS_TIME。 moby/moby#43775 - 允許
bpf搭配CAP_BPF和perf_event_open搭配CAP_PERFMON。 moby/moby#43988 - 在預設 seccomp 設定檔中明確將
clone3系統呼叫設定為返回ENOSYS,以確保glibc將正確地回退到使用clone。 moby/moby#42681
錯誤修正與增強功能
- 將
overlay2提升為預設儲存驅動程式 (btrfs和zfs現在需要明確選擇加入)。 moby/moby#42661 - 為
docker cp命令新增一個載入轉圈圖示。 docker/cli#2708 - 棄用
ElectAuthServer函數,並使其在不呼叫GET /infoAPI 端點的情況下返回預設註冊表。 docker/cli#2819 - 回溯 Swarm 服務時,進度條不再反向。 docker/cli#2940
- 使用
net.JoinHostPort()來修正 IPv6 位址的格式問題。 docker/cli#2972 - CLI 錯誤訊息現在會列印到
stderr。 docker/cli#3044 - 如果使用僅使用本機資訊的自訂
--format,則改進docker info的效能。進行此變更後,CLI 僅在偵測到需要來自 daemon 的資訊時才使用 daemon API。 docker/cli#3179 - 移除
--stop-signal旗標的預設值,因為它可能無法反映 daemon 實際使用的預設值。 docker/cli#3245 - 將 Compose 模式
3.10新增到docker stack;允許省略version欄位(結果為latest)。 docker/cli#3257 - 在
docker stack中,Compose 版本3現在等同於3.x(最新版)。 docker/cli#3445 - 修正 Windows 上在非互動模式下執行容器後
<Ctrl-c>會卡住而無法退出的問題。 docker/cli#3302 - 在
run命令的-v/--volume和-m/--mount旗標中新增相對來源路徑。 docker/cli#3469 docker exec -t現在在執行程序建立時立即設定其控制台大小。 docker/cli#3627- 更新
docker info的美觀列印格式,以提供更多關於已安裝外掛程式的詳細資訊。 docker/cli#3645 - 當環境覆寫上下文時,為
docker context list和docker context use命令列印警告訊息。 docker/cli#3668 - 新增一個自訂
aliases註釋,可用於列印命令的所有可用別名。 docker/cli#3694 - 當執行
docker context use並選擇當前上下文時,CLI 不再建立或更新 CLI 設定檔。 docker/cli#3721 - 當執行
docker context rm --force時,不存在的上下文現在會被忽略。 docker/cli#3791 - 新增在 Compose 檔案中將整數覆寫為
0的功能。 docker/cli#3812 - SIGINT (
<Ctrl-c>) 現在會傳遞到正在執行的容器,而不是導致 CLI 退出。 docker/cli#3849 - 透過在列印前排序連接埠,改進
docker port CONTAINER的使用者體驗。 docker/cli#3892 - API:在 API 版本 >= 1.42 時,
GET /containers/{id}/logs和POST /containers/{id}/attach現在使用Content-type回應標頭報告正在使用的原始串流格式。 moby/moby#39812 - 將 Windows 層的預設沙箱大小設定為 127GB,並確保
--storage-opts旗標適用於 Windows 上的所有儲存。 moby/moby#41636 - 從 containerd 設定檔 (
/var/run/docker/containerd/containerd.toml) 中移除外掛程式區段。 moby/moby#41675 - 在 tar 匯入期間拒絕
null艙單。 moby/moby#41842 - 為外掛程式的自訂執行時新增 shim 配置。 moby/moby#41854
- 容器健康檢查現在在 daemon 重新啟動時會繼續進行。 moby/moby#41935
btrfs驅動程式清理時不再停用配額。 moby/moby#42273- 現在可以在
--privileged無根容器中掛載可存取的主機裝置。 moby/moby#42638 - 修正
.dockerignore中**/foo遞迴萬用字元目錄模式處理不正確的問題。 moby/moby#42676 - 擴展
docker import --platform以允許將匯入的映像檔標記為外部架構。 moby/moby#43103 - 現在在 daemon 啟動時執行 CPU 即時選項的驗證,而不是對每個單獨的容器執行驗證,允許啟動時提早失敗。 moby/moby#43131
- 凍結
namesgenerator套件,不再新增內容。使用者必須滿足於現有的 25359 種形容詞-名稱組合。 moby/moby#43210 - API:在 API 版本 >= 1.42 時,
containers/{id}/attach/ws僅根據stdin、stdout和stderr參數串流。 moby/moby#43322 - 修正容器在持續流量下重新啟動後 UDP 流量無法運作的問題。 moby/moby#43409
- 新增支援拉取具有自訂 amd64 微架構功能級別的映像檔,這些功能級別受 Go、GCC、LLVM 和其他編譯器工具的最新版本支援。 moby/moby#43434
- 改進 API 中無效 JSON 請求的驗證。 moby/moby#43463
- 減輕慢速
exec啟動對健康檢查的影響。檢查逾時現在僅適用於健康檢查命令執行的持續時間。啟動命令所需的時間不再計入逾時。 moby/moby#43480 - 控制台
tty大小在建立時立即設定。 moby/moby#43593、 moby/moby#43622 - 修正
overlay2掛載在容器啟動失敗或 daemon 關閉後未清理的問題。 moby/moby#43659 - 將清單列表解析與
containerd匹配。 moby/moby#43675 - 當 daemon 在無根模式下運行時,跳過使用
firewalld進行網路連線。 moby/moby#43813 - 如果 Windows 上遺失自訂 NAT 網路,則在 daemon 重新啟動後會重新建立。 moby/moby#43858
- 修正容器健康檢查程序逾時時無法終止的問題。 moby/moby#43994
- 修正
live-restore在重啟策略和磁碟區參考方面的問題。 moby/moby#44237 - API:在 API 版本 >= v1.42 時,預設只修剪匿名磁碟區。傳遞篩選器
all=true以修剪具名磁碟區和匿名磁碟區。 moby/moby#44259 - API:支援
GET /system/df端點上的並發呼叫。 moby/moby#42715 - 提高 daemon 在接收到 SIGQUIT 時傾印堆疊並以代碼 2 退出可靠性。 moby/moby#44831
- 改進
docker logs -f在 Windows 上的可靠性,並防止local日誌驅動程式中換行符號被丟棄。 moby/moby#43294 - 修正 daemon 中因容器日誌緩衝而導致的罕見死鎖問題。 moby/moby#44856
- 改進雜項檔案系統操作中的錯誤處理,以便 daemon 可以在 overlayfs 後端檔案系統上啟動。 moby/moby#44834
- 修正當 daemon 在無根模式下運行時,
--ipc=host未正確處理的問題。 moby/moby#44863 - 修正一系列長期存在的問題,其中陳舊的 conntrack 條目導致容器的 UDP 流量路由不正確。 moby/moby#44752
- 修正 API 中列出半註冊容器的問題,以及因在 API 呼叫中使用部分註冊容器而導致的 nil 指標解引用和恐慌。 moby/moby#44633
- 修正無法建立
DOCKER-USERip6tables 鏈的問題。 moby/moby#44845 - 修正當
ip6tables命令不可用時無法清理 iptables 規則的問題。 moby/moby#44727 - 修正啟用使用者空間代理後,某些 iptables NAT 規則未清理的問題。 moby/moby#44811
- 修正極少數情況下,清理啟動容器失敗嘗試時處理不當導致的潛在程序洩漏問題。 moby/moby#44400
- 修正磁碟區的
CreatedAt時間反映的是初始化時間而非建立時間的問題。 moby/moby#44725 - 修正 CLI 在某些命令中錯誤地報告伺服器不相容而非無法連線的問題。 docker/cli#3901、 docker/cli#3904
- 修正 Zsh 中磁碟區補齊功能損壞的問題。 docker/cli#2998
- 改進
docker context在存在無效上下文時的輸出。 docker/cli#3847 - 當輸出不是 TTY 時,移除 CLI 說明註釋的 ANSI 裝飾,並新增換行符號以提高可讀性。 docker/cli#3973
- 新增
docker container remove作為docker container rm的別名。 docker/cli#3986
已知問題
apparmor_parser (追蹤問題)
部分 Debian 使用者回報,升級到 23.0 分支後,容器無法啟動的問題。錯誤訊息指出此問題是由於缺少 apparmor_parser 二進位檔所致
Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser --version` failed with output:
error: exec: "apparmor_parser": executable file not found in $PATH
Error: failed to start containers: somecontainer
此問題的解決方法是手動安裝 apparmor 套件
apt-get install apparmor
BuildKit 內聯快取 (追蹤問題)
嘗試使用 BuildKit 的內聯快取功能建置映像檔(例如 docker build --build-arg BUILDKIT_INLINE_CACHE=1 .、docker buildx build --cache-to type=inline .)將導致 daemon 意外退出
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x147ff00]
goroutine 693 [running]:
github.com/docker/docker/vendor/github.com/moby/buildkit/cache.computeBlobChain.func4.1({0x245cca8, 0x4001394960})
/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/blobs.go:206 +0xc90
github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol.(*call).run(0x40013c2240)
/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go:121 +0x64
sync.(*Once).doSlow(0x0?, 0x4001328240?)
/usr/local/go/src/sync/once.go:74 +0x100
sync.(*Once).Do(0x4001328240?, 0x0?)
/usr/local/go/src/sync/once.go:65 +0x24
created by github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol.(*call).wait如果設定了 daemon 在此類崩潰後重新啟動(例如透過 systemd),它將會重新啟動。此版本中唯一可用的緩解措施是避免在啟用內聯快取功能的情況下執行建置。
帶有溫快取的 BuildKit (追蹤問題)
如果在 daemon 的先前版本上使用 BuildKit 建置了映像檔,並使用 23.0 daemon 建置,則先前快取的層將無法正確還原。如果 Dockerfile 中沒有任何行變更,映像檔可能看起來建置正確;但是,如果由於 Dockerfile 中某些行的變更而發生部分快取失效,則仍然有效且先前快取的層將無法正確載入。
這最常表現為,在 Dockerfile 中更改某些行後,應該存在於映像檔中的檔案卻不存在於 RUN 階段或任何其他引用檔案的階段中。
[+] Building 0.4s (6/6) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 102B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> [internal] load metadata for docker.io/library/node:18-alpine
=> [base 1/2] FROM docker.io/library/node:18-alpine@sha256:bc329c7332cffc30c2d4801e38df03cbfa8dcbae2a7a52a449db104794f168a3
=> CACHED [base 2/2] WORKDIR /app
=> ERROR [stage-1 1/1] RUN uname -a
------
> [stage-1 1/1] RUN uname -a:
#0 0.138 runc run failed: unable to start container process: exec: "/bin/sh": stat /bin/sh: no such file or directory
------
Dockerfile:5
--------------------
3 |
4 | FROM base
5 | >>> RUN uname -a
6 |
--------------------
ERROR: failed to solve: process "/bin/sh -c uname -a" did not complete successfully: exit code: 1為了解決這個問題,必須丟棄先前的建置快取。docker builder prune -a 將完全清空建置快取,並透過移除處理不當的快取層,允許受影響的建置再次進行。
ipvlan 網路 (追蹤問題)
升級到 23.0 分支時,任何 ipvlan 網路的存在都將阻止 daemon 啟動
panic: interface conversion: interface {} is nil, not string
goroutine 1 [running]:
github.com/docker/docker/libnetwork/drivers/ipvlan.(*configuration).UnmarshalJSON(0x40011533b0, {0x400069c2d0, 0xef, 0xef})
/go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ipvlan_store.go:196 +0x414
encoding/json.(*decodeState).object(0x4001153440, {0x5597157640?, 0x40011533b0?, 0x559524115c?})
/usr/local/go/src/encoding/json/decode.go:613 +0x650
encoding/json.(*decodeState).value(0x4001153440, {0x5597157640?, 0x40011533b0?, 0x559524005c?})
/usr/local/go/src/encoding/json/decode.go:374 +0x40
encoding/json.(*decodeState).unmarshal(0x4001153440, {0x5597157640?, 0x40011533b0?})
/usr/local/go/src/encoding/json/decode.go:181 +0x204
encoding/json.Unmarshal({0x400069c2d0, 0xef, 0xef}, {0x5597157640, 0x40011533b0})
/usr/local/go/src/encoding/json/decode.go:108 +0xf4
github.com/docker/docker/libnetwork/drivers/ipvlan.(*configuration).SetValue(0x4000d18050?, {0x400069c2d0?, 0x23?, 0x23?})
/go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ipvlan_store.go:230 +0x38為了解決這個問題,受影響的使用者可以降級並移除網路,然後再次升級。或者,可以移除整個網路儲存,並在升級後重新建立網路。網路儲存位於 /var/lib/docker/network/files/local-kv.db。如果 daemon 使用了替代的 --data-root,請將 /var/lib/docker 替換為該替代路徑。
Kata Containers (追蹤問題)
23.0 分支帶來了對替代 containerd shim 的支援,例如 io.containerd.runsc.v1 (gVisor) 和 io.containerd.kata.v2 (Kata Containers)。
使用 Kata Containers 執行時,退出 exec 會話會停止正在運行的容器,並且如果開啟了 TTY,則會使連接的 CLI 卡住。目前除了避免在 Kata 執行時運行的容器中執行 exec 外,沒有其他緩解措施。
這個問題的根本原因在於 Moby 中一個長期存在的錯誤。這將在未來的版本中解決。請注意,對替代 OCI 執行時的支援是一項新功能,隨著更多使用者開始使用此功能,可能會發現類似的問題。