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 版的最新變更、新增功能、已知問題和修正。

欲瞭解更多資訊關於

從 23.0.0 版發行開始,Docker Engine 不再使用 CalVer 版本控制,而是開始使用 SemVer 版本控制格式。變更版本格式是邁向 Go 模組相容性的一個墊腳石,但儲存庫尚未採用 Go 模組,並且仍然需要使用「+incompatible」版本。未來版本將繼續努力實現 Go 模組相容性。

23.0.6

2023-05-08

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

錯誤修正與增強功能

  • 修正 vfs 儲存驅動程式在 NFS 上無法運作的問題。 moby/moby#45465

套件更新

23.0.5

2023-04-26

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

錯誤修正與增強功能

  • 修剪磁碟區時新增 --all / -a 選項。 docker/cli#4229
  • docker info 新增 --format=jsondocker/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

套件更新

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

套件更新

23.0.3

2023-04-04
注意

由於 CentOS 9 Stream 的套件儲存庫存在問題,CentOS 9 的套件目前無法使用。CentOS 9 的套件可能會在以後新增,或作為下一個 (23.0.4) 補丁版本的一部分。

錯誤修正與增強功能

  • 修正了可能導致 Swarm 加密重疊網路無法兌現其保證的多個問題,解決了 CVE-2023-28841CVE-2023-28840CVE-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#8087moby/moby#45043
  • 確保從 Git URL 中移除憑證,以產生 BuildKit 建置資訊。修正 CVE-2023-26054moby/moby#45110
  • 修正 Dockerfile 中 VOLUME 行建立的匿名磁碟區被磁碟區修剪排除的問題。 moby/moby#45159
  • 修正從 Swarm 節點移除磁碟區時無法正確傳播錯誤的問題。 moby/moby#45155
  • 透過停用 mergeop/diffop 優化,暫時解決 BuildKit COPY --link 中的錯誤。 moby/moby#45112
  • 當父 Swarm 作業被移除時,正確清理子任務。 moby/swarmkit#3112moby/moby#45107
  • 修正 Swarm 服務建立邏輯,以便 GenericResource 和非預設網路可以同時使用。 moby/swarmkit#3082moby/moby#45107
  • 修正 Swarm CSI 支援需要 CSI 外掛程式提供暫存端點才能發佈磁碟區的問題。 moby/swarmkit#3116moby/moby#45107
  • 修正某些設定中因日誌緩衝而導致的恐慌問題。 containerd/fifo#47moby/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

打包

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

打包

23.0.0

2023-02-01

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

新增功能

  • 將 Buildx 和 BuildKit 設定為 Linux 上的預設建置器。 moby/moby#43992
    • docker build 別名為 docker buildx builddocker/cli#3314
    • 透過明確設定 DOCKER_BUILDKIT=0,仍可使用舊版建置器。
    • BuildKit 與舊版建置器在處理多階段建置方面存在差異。更多資訊請參閱 多階段建置
  • 新增支援拉取 zstd 壓縮層。 moby/moby#41759moby/moby#42862
  • 新增支援 Linux 上的替代 OCI 執行時,與 containerd 執行時 v2 API 相容。 moby/moby#43887moby/moby#43993
  • 新增支援 Windows 上的 containerd runhcs shim(預設為關閉)。 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 和使用 l3s ipvlan_modemoby/moby#42542
  • 新增支援顯示 overlay2 儲存驅動程式的 metacopy 選項值。 moby/moby#43557
  • 新增支援使用 IDType://ID 語法描述 Windows 裝置。 moby/moby#43368
  • 新增 RootlessKitslirp4netnsVPNKit 版本報告。 moby/moby#42330
  • 新增 SwarmKit 叢集磁碟區 (CSI) 的實驗性支援。 moby/moby#41982
    • CLI:為 docker volume 新增叢集磁碟區 (CSI) 選項。 docker/cli#3606
    • CLI:為 docker stack 新增叢集磁碟區 (CSI) 支援。 docker/cli#3662
  • 新增 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=jsondocker/cli#2936
  • docker createdocker run 命令新增 --quiet 選項,以抑制拉取映像檔時的輸出。 docker/cli#3377
  • docker network rm 子命令新增 --force 選項。即使網路不存在,CLI 也會返回 0 退出代碼。對伺服器端移除網路的程序沒有影響。 docker/cli#3547
  • docker stopdocker restart 新增 --signal 選項。 docker/cli#3614
  • docker-proxy 新增 -v/--version 旗標。 moby/moby#44703
  • 當 daemon 在無根模式下運行時,外掛程式現在會從知名的使用者級別路徑中被發現。 moby/moby#44778
  • daemon 現在能優雅地處理 JSON 設定檔中常見的替代 JSON 編碼,並報告有用的錯誤。 moby/moby#44777moby/moby#44832
    • 接受帶有位元組順序標記的 UTF-8。
    • 接受帶有位元組順序標記的 UTF-16。
    • 無效的 UTF-8 會提早報告並附上易於理解的錯誤訊息。
  • 允許透過 docker commit 使用 STOPSIGNALmoby/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 /_pingHEAD /_ping 新增 Swarm 標頭,允許單次請求偵測 Swarm 支援。 moby/moby#42064
  • API:為 POST /containers/{id}/stopPOST /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.servicemoby/moby#43107

已移除

已棄用

  • 要求 Windows Server RS5 / LTSC 2019 (建置 17763) 作為運行 daemon 的最低要求。 moby/moby#43254
  • 在 API 版本 >= 1.42 時棄用 BuilderSizemoby/moby#42608
  • 在 API 版本 >= 1.42 時棄用 BuildCache.Parent,改用新引入的 BuildCache.Parentsmoby/moby#43908
  • 棄用 pkg/urlutil,將實作移至 builder/remotecontext/urlutilmoby/moby#43477

升級

安全性

  • 將容器 hostconfig.json 檔案的權限變更為 0600 (原為 0644)。 moby/moby#41620
  • 修正 --seccomp-profile 不接受 unconfined 的問題,並將預設 seccomp 設定檔重新命名為 builtinmoby/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_VSOCKsocketmoby/moby#44563
  • 在預設 seccomp 設定檔中重新啟用 process_vm_readvprocess_vm_writevmoby/moby#42083
  • 將與 PKU 相關的系統呼叫新增到預設 seccomp 設定檔。 moby/moby#43812
  • 允許 clock_settime64 搭配 CAP_SYS_TIMEmoby/moby#43775
  • 允許 bpf 搭配 CAP_BPFperf_event_open 搭配 CAP_PERFMONmoby/moby#43988
  • 在預設 seccomp 設定檔中明確將 clone3 系統呼叫設定為返回 ENOSYS,以確保 glibc 將正確地回退到使用 clonemoby/moby#42681

錯誤修正與增強功能

  • overlay2 提升為預設儲存驅動程式 (btrfszfs 現在需要明確選擇加入)。 moby/moby#42661
  • docker cp 命令新增一個載入轉圈圖示。 docker/cli#2708
  • 棄用 ElectAuthServer 函數,並使其在不呼叫 GET /info API 端點的情況下返回預設註冊表。 docker/cli#2819
  • 回溯 Swarm 服務時,進度條不再反向。 docker/cli#2940
  • 使用 net.JoinHostPort() 來修正 IPv6 位址的格式問題。 docker/cli#2972
  • CLI 錯誤訊息現在會列印到 stderrdocker/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 listdocker 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}/logsPOST /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 僅根據 stdinstdoutstderr 參數串流。 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#43593moby/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-USER ip6tables 鏈的問題。 moby/moby#44845
  • 修正當 ip6tables 命令不可用時無法清理 iptables 規則的問題。 moby/moby#44727
  • 修正啟用使用者空間代理後,某些 iptables NAT 規則未清理的問題。 moby/moby#44811
  • 修正極少數情況下,清理啟動容器失敗嘗試時處理不當導致的潛在程序洩漏問題。 moby/moby#44400
  • 修正磁碟區的 CreatedAt 時間反映的是初始化時間而非建立時間的問題。 moby/moby#44725
  • 修正 CLI 在某些命令中錯誤地報告伺服器不相容而非無法連線的問題。 docker/cli#3901docker/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 執行時的支援是一項新功能,隨著更多使用者開始使用此功能,可能會發現類似的問題。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.