Docker Engine 版本 28 發行說明
目錄
此頁面描述了 Docker Engine 版本 28 的最新更改、新增功能、已知問題和修復。
有關更多資訊,請參閱
- 已棄用和移除的功能,請參閱已棄用 Engine 功能。
- Engine API 的更改,請參閱Engine API 版本歷史。
28.1.1
2025-04-18有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
錯誤修復和增強功能
- 修復
dockerd-rootless-setuptool.sh
錯誤報告缺失iptables
的問題。moby/moby#49833 - containerd 映象儲存:修復使用
docker load
載入包含零大小 tar 頭部的歸檔檔案時可能導致守護程序崩潰的問題。moby/moby#49837
打包更新
- 更新 Buildx 至 v0.23.0。docker/docker-ce-packaging#1185
- 更新 Compose 至 v2.35.1。docker/docker-ce-packaging#1188
網路
- 當未找到上游 DNS 伺服器時,在容器的
/etc/resolv.conf
中新增警告。moby/moby#49827
28.1.0
2025-04-17有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
新增
- 新增
docker bake
子命令作為docker buildx bake
的別名。docker/cli#5947 - 實驗性:在
docker run
和docker create
上新增新的--use-api-socket
標誌,以啟用從容器內部訪問 Docker 套接字,並與容器共享來自主機的憑據。docker/cli#5858 docker image inspect
現在支援--platform
標誌,用於檢查多平臺映象的特定平臺。docker/cli#5934
錯誤修復和增強功能
- 新增 CLI shell 補全對上下文名稱的支援。docker/cli#6016
- 修復
docker images --tree
未將非容器映象的內容大小計入總映象內容大小的問題。docker/cli#6000 - 修復
docker load
未保留被替換映象的問題。moby/moby#49650 - 修復登入自定義登錄檔時
docker login
提示的問題。docker/cli#6015 - 修復在高 CPU 核心數機器上
docker stats
無法正常工作的問題。moby/moby#49734 - 修復與私有倉庫互動時導致
docker pull/push
失敗的迴歸問題。docker/cli#5964 - 修復在沒有
ip_tables
核心模組的主機上阻止無根 Docker 設定的問題。moby/moby#49727 - 修復可能導致 firewalld 重新載入後,不需要的 iptables 規則被恢復且從未被刪除的問題。moby/moby#49728
- 改進 CLI 對
docker service scale
的補全。docker/cli#5968 docker images --tree
現在預設隱藏未標記的映象和懸空(dangling)映象。docker/cli#5924- 如果無法建立與 Docker 守護程序的連線,
docker system info
將提供退出碼。docker/cli#5918 - containerd 映象儲存:修復使用 BuildKit 構建時未發出
image tag
事件的問題。 moby/moby#49678 - containerd 映象儲存:改進
docker push/pull
對遠端 registry 錯誤的處��方式。 moby/moby#49770 - containerd 映象儲存:顯示非層映象 blob 的拉取進度。 moby/moby#49746
打包更新
- 新增 Debian "Trixie" 軟體包。 docker/docker-ce-packaging#1181
- 新增 Fedora 42 軟體包。 docker/containerd-packaging#418, docker/docker-ce-packaging#1169
- 新增 Ubuntu 25.04 "Plucky Puffin" 軟體包。 docker/containerd-packaging#419, docker/docker-ce-packaging#1177
- 將 BuildKit 更新到 v0.21.0。 moby/moby#49809
- 將 Compose 更新到 v2.35.0。 docker/docker-ce-packaging#1183
- 將 Go 執行時更新到 1.23.8。 docker/cli#5986, docker/docker-ce-packaging#1180, moby/moby#49737
網路
- 修復 Swarm 容器上的主機埠對映在
docker ps
和docker inspect
時重複顯示的 bug。 moby/moby#49724 - 修復導致容器網路附加失敗,並出現錯誤“Bridge port not forwarding”(橋接埠未轉發)的問題。 moby/moby#49705
- 修復從預設橋接網路中的容器移除
--link
時出現的問題。 moby/moby#49778 - 改進網路-端點關係的跟蹤方式,以減少錯誤返回“has active endpoints”(有活動端點)錯誤的機會。 moby/moby#49736
- 改進“has active endpoints”(有活動端點)錯誤訊息,包含仍連線到正在刪除的網路上的端點名稱。 moby/moby#49773
API
- 將 API 版本更新到 v1.49。 moby/moby#49718
GET /image/{name}/json
現在支援platform
引數,允許指定要檢查的多平臺映象的哪個平臺變體。 moby/moby#49586GET /info
現在返回一個FirewallBackend
欄位,其中包含有關守護程序防火牆配置的資訊。 moby/moby#49761
Go SDK
- 將最低要求的 Go 版本更新到 go1.23。 docker/cli#5868
cli/command/context
: 從 JSON 輸出中移除臨時的ContextType
欄位。 docker/cli#5981client
: 在可能的情況下,保留映象引用為規範格式。 moby/moby#49609
已棄用
- API:在
GET /info
響應的RegistryConfig
結構中,已棄用的AllowNondistributableArtifactsCIDRs
和AllowNondistributableArtifactsHostnames
欄位在 API v1.49 中已省略。 moby/moby#49749 - API:已棄用:
GET /info
端點中的ContainerdCommit.Expected
、RuncCommit.Expected
和InitCommit.Expected
欄位在 API v1.48 中已棄用,現在在 API v1.49 中已省略。 moby/moby#48556 - Go-SDK:
cli/command/image
: 棄用RunPull
:此函式僅在內部使用,將在下個版本中移除。 docker/cli#5975 - Go-SDK:
cli/config/configfile
: 棄用ConfigFile.Experimental
欄位。自 v20.10 版本以來,實驗性 CLI 功能始終啟用,此欄位不再使用。對於可選功能,請改用ConfigFile.Features
。此欄位將在未來版本中移除。 docker/cli#5977 - Go-SDK:棄用
pkg/archive
,該模組已遷移到github.com/moby/go-archive
。 moby/moby#49743 - Go-SDK:棄用
pkg/atomicwriter
,該模組已遷移到github.com/moby/sys/atomicwriter
。 moby/moby#49748 - Go-SDK:
opts
: 移除已棄用的PortOpt
、ConfigOpt
、SecretOpt
別名。 docker/cli#5953 - Go-SDK:
registry
: 棄用APIEndpoint.Official
欄位。 moby/moby#49706
28.0.4
2025-03-25有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
錯誤修復和增強功能
- 修復與私有倉庫互動時導致
docker pull/push
失敗的迴歸問題。docker/cli#5964
28.0.3
2025-03-25有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
錯誤修復和增強功能
- 修復當容器在資料被消費前退出時,
docker run
過早截斷STDOUT
/STDERR
的問題。 docker/cli#5957
打包更新
- 將 BuildKit 更新到 v0.20.2。 moby/moby#49698
- 將 runc 更新到 v1.2.6。 moby/moby#49682
- 將 containerd 更新到 v1.7.26。 docker/containerd-packaging#409
28.0.2
2025-03-19有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
錯誤修復和增強功能
- 修復 CLI 特定屬性 (
docker.cli.*
) 被無意中傳遞給下游 OTel 服務的問題。docker/cli#5842 - 修復使用者指定的
OTEL_RESOURCE_ATTRIBUTES
屬性被 CLI 內部遙測屬性覆蓋的問題。CLI 現在可以正確地將使用者指定的屬性與內部屬性合併,使兩者共存。docker/cli#5842 - 修復在 Windows 系統上,當存在 v28.0.0 之前建立的容器時,daemon 無法啟動的問題。moby/moby#49626
- 修復在使用
--min-free-space
引數執行docker buildx prune
時可能出現的錯誤。moby/moby#49623 - 修復關閉容器時 daemon 日誌中出現虛假的
io: read/write on closed pipe
錯誤。moby/moby#49590 - 修復當 containerd socket 未立即可用時,Docker daemon 過早失敗的問題。moby/moby#49603
- 預設在容器的
/proc
和/sys
中遮蔽 Linux 熱中斷資訊。moby/moby#49560 - 更新
contrib/check-config.sh
,以檢查更多與 iptables 相關的核心模組。moby/moby#49622 - containerd 映象儲存:修復透過
--user
引數傳遞的使用者 ID 處理中的整數溢位問題。moby/moby#49652 - containerd 映象儲存:修復 daemon 日誌中記錄虛假的
reference for unknown type: application/vnd.in-toto+json
警告。moby/moby#49652 - containerd 映象儲存:提高執行大量容器時
docker ps
的效能。moby/moby#49365
打包更新
- 將 BuildKit 更新至 v0.20.1。moby/moby#49587
- 將 Buildx 更新至 v0.22.0。docker/docker-ce-packaging#1175
- 將 Compose 更新至 v2.34.0。docker/docker-ce-packaging#1172
- 將 Go 執行時更新至 1.23.7。docker/cli#5890, docker/docker-ce-packaging#1171, moby/moby#49580
- 將 RootlessKit 更新至 v2.3.4。moby/moby#49614
- 將 containerd(僅限靜態二進位制檔案)更新至 v1.7.27。moby/moby#49656
網路
- 新增環境變數
DOCKER_INSECURE_NO_IPTABLES_RAW=1
,以允許 Docker 在 Linux 核心無法提供CONFIG_IP_NF_RAW
支援的系統上執行。啟用此選項後,Docker 將不會在 iptables 的raw
表中建立規則。警告:生產環境不建議使用此選項,因為它會降低安全性,允許本地網路上的其他主機路由到釋出到主機地址的埠,即使它們釋出到127.0.0.1
。此選項繞過了 Docker Engine 28.0.0 中引入的一些安全強化措施。moby/moby#49621 - 允許在端點連線到 macvlan 網路驅動程式(其中父介面已關閉)時啟動容器。moby/moby#49630
- 對於源自
gateway_mode=routed
網路的報文,不要跳過 DNAT。moby/moby#49577 - 修復導致
docker ps
不一致地報告雙棧埠對映的 bug。moby/moby#49657 - 修復可能導致
docker-proxy
停止將 UDP 資料報轉發到容器的 bug。moby/moby#49649 - 修復導致
docker-proxy
過早關閉到容器的 UDP 連線並導致源地址不必要地更改的 bug。moby/moby#49649
Go SDK
- 將
cli-plugins/manager
中的各種型別和常量移至單獨的包。docker/cli#5902 - 將最低要求的 Go 版本更新至 go1.23。moby/moby#49541
cli/command
:將PrettyPrint
工具函式移至cli/command/formatter
。docker/cli#5916- runconfig/errors:將
ErrConflictHostNetwork
拆分為ErrConflictConnectToHostNetwork
和ErrConflictDisconnectFromHostNetwork
。moby/moby#49605
已棄用
- Go-SDK:廢棄
cli-plugins/manager.ResourceAttributesEnvvar
常量。此常量曾用於內部,但其值為OTEL_RESOURCE_ATTRIBUTES
名稱,該名稱屬於 OpenTelemetry 規範。使用此常量的使用者應自行定義。此常量將在下一版本中移除。docker/cli#5881 - Go-SDK:廢棄
opts.PortOpt
、opts.ConfigOpt
和opts.SecretOpt
。這些型別已移至opts/swarmopts
包。docker/cli#5907 - Go-SDK:移除
service/logs
包。docker/cli#5910 - Go-SDK:
cli/command/image
:廢棄PushTrustedReference
並移至cli/trust
。docker/cli#5894 - Go-SDK:
cli/command/image
:廢棄TrustedPush
並將其內部化。docker/cli#5894 - Go-SDK:
cli/command
:廢棄Cli.NotaryClient
,請改用trust.GetNotaryRepository
。此方法已不再使用,將在下一版本中移除。docker/cli#5885 - Go-SDK:
cli/command
:廢棄Cli.RegistryClient
。此方法僅在內部使用,將在下一版本中移除。請改用client.NewRegistryClient
。docker/cli#5889 - Go-SDK:
registry
:廢棄RepositoryInfo.Official
欄位。moby/moby#49567 - Go-SDK:
registry
:廢棄HostCertsDir
。此函式僅在內部使用,將在下一版本中移除。moby/moby#49612 - Go-SDK:
registry
:廢棄SetCertsDir
。使用 RootlessKit 執行時,證書目錄現在會自動選擇,不應再手動設定。moby/moby#49612
28.0.1
2025-02-26有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
網路
- 移除對核心模組
ip_set
、ip_set_hash_net
和netfilter_xt_set
的依賴。- 此依賴項在 28.0.0 版本中引入,但被證明具有過度干擾性。使用這些模組的 iptables 規則已被替換。moby/moby#49530
- 允許在停用 IPv6 的主機上啟動 daemon,無需強制要求
--ip6tables=false
引數。moby/moby#49525 - 修復了一個錯誤,該錯誤會導致使用
--restart=always
且已釋出埠已被佔用的容器進入緊密迴圈重啟。 moby/moby#49507 - 修復了 Swarm 入口(ingress)的一個問題,該問題由 iptables 規則順序不正確導致。 moby/moby#49538
- 修復了從
--config-only
網路建立 swarm 作用域網路的問題。 moby/moby#49521 - 修復了
docker network inspect
在沒有指定 IPAM 配置的情況下報告新建立網路的 IPv6 閘道器帶有 CIDR 字尾的問題,此問題會在守護程式(daemon)重啟後恢復正常。 moby/moby#49520 - 改進了當核心模組
ip_set
、ip_set_hash_net
和netfilter_xt_set
不可用時報告的錯誤資訊。 moby/moby#49524 - 將大多數 Docker 的 iptables 規則移出 filter-FORWARD 鏈,以便其他應用程式可以自由地追加必須在 Docker 規則之後的規則。 moby/moby#49518
- 更新了
--help
輸出和 man 手冊頁,以說明哪些選項僅適用於預設的橋接網路。 moby/moby#49522
錯誤修復和增強功能
- 修復了在使用
"skip-tls-verify"
選項時,docker context create
總是返回錯誤的問題。 docker/cli#5850 - 修復了 shell 補全在建議服務和節點時顯示 ID 而不是名稱的問題。 docker/cli#5848
- 修復了
docker exec/run
返回非零狀態時意外將退出狀態列印到標準錯誤輸出的問題。 docker/cli#5854 - 修復了迴歸錯誤:
protocol "tcp" is not supported by the RootlessKit port driver "slirp4netns"
。 moby/moby#49514 - containerd 映象儲存:修復了
docker inspect
無法顯示包含所有平臺缺失層(missing layers)的多平臺映象的問題。 moby/moby#49533 - containerd 映象儲存:修復了
docker images --tree
報告錯誤內容大小的問題。 moby/moby#49535 - 修復了在 i386 平臺上的編譯問題。 moby/moby#49526
打包更新
- 將
github.com/go-jose/go-jose/v4
更新到 v4.0.5 版本,以解決 GHSA-c6gw-w398-hv78 / CVE-2025-27144 安全漏洞。 docker/cli#5867 - 將 Buildx 更新到 v0.21.1 版本。 docker/docker-ce-packaging#1167
- 將 Compose 更新到 v2.33.1 版本。 docker/docker-ce-packaging#1168
API
- containerd 映象儲存:修復了對於僅含索引(index-only)的映象,
GET /images/json?manifests=1
未填充Manifests
欄位的問題。 moby/moby#49533 - containerd 映象儲存:修復了
GET /images/json and /images/<name>/json
的Size.Content
欄位包含了本地不可用內容大小的問題。 moby/moby#49535
28.0.0
2025-02-19有關此版本中拉取請求和更改的完整列表,請參閱相關的 GitHub 里程碑
- docker/cli, 28.0.0 版本里程碑
- moby/moby, 28.0.0 版本里程碑
- 已棄用和移除的功能,詳見 已棄用功能(Deprecated Features)。
- Engine API 的變更,詳見 API 版本歷史(API version history)。
新增
- 新增透過
--mount type=image
選項將映象掛載到容器內的功能。 moby/moby#48798- 您還可以指定
--mount type=image,image-subpath=[subpath],...
選項來從映象中掛載特定路徑。 docker/cli#5755
- 您還可以指定
docker images --tree
現在顯示元資料徽章(metadata badges)。 docker/cli#5744docker load
、docker save
和docker history
現在支援--platform
標誌,允許您在對多平臺映象執行單平臺操作時選擇特定平臺。 docker/cli#5331- 為
docker service create
和docker stack
命令新增OOMScoreAdj
引數。 docker/cli#5145 docker buildx prune
現在支援reserved-space
、max-used-space
、min-free-space
和keep-bytes
過濾器。 moby/moby#48720- Windows:新增支援將 containerd 作為守護程式(daemon)的子程序執行,而非使用系統安裝的 containerd。 moby/moby#47955
網路
docker-proxy
二進位制檔案已更新,舊版本將無法與更新後的dockerd
一起工作。 moby/moby#48132- 關閉了一個時間視窗,在此時間視窗內,使用者態代理(
docker-proxy
)可能接受 TCP 連線,而這些連線會在iptables
NAT 規則設定完成後失敗。 - 可執行檔案
rootlesskit-docker-proxy
不再使用,已從構建和分發中移除。
- 關閉了一個時間視窗,在此時間視窗內,使用者態代理(
- 從宿主機
/etc/resolv.conf
讀取的 DNS 域名伺服器現在總是從宿主機的網路名稱空間中訪問。 moby/moby#48290- 當宿主機的
/etc/resolv.conf
不包含任何域名伺服器且沒有指定--dns
覆蓋時,除了預設橋接網路和構建容器外,不再使用 Google 的 DNS 伺服器。
- 當宿主機的
- 橋接(bridge)和 macvlan 網路中的容器介面現在使用隨機生成的 MAC 地址。 moby/moby#48808
- 介面啟動時將傳送 Gratuitous ARP / Neighbour Advertisement 訊息,以便在 IP 地址被重用時,它們能與新生成的 MAC 地址關聯起來。
- 預設橋接網路中的 IPv6 地址現在由 IPAM 分配,而不是從 MAC 地址派生。
- 已棄用的 OCI
prestart
鉤子現在僅由構建容器使用。對於其他容器,網路介面在任務建立完成後、容器任務啟動前被新增到網路名稱空間。 moby/moby#47406 - 為
docker run
、docker container create
和docker network connect
命令新增gw-priority
選項。Engine 將使用此選項來確定哪個網路為容器提供預設閘道器。在docker run
命令中,此選項僅透過擴充套件的--network
語法可用。 docker/cli#5664 - 新增網路標籤(netlabel)
com.docker.network.endpoint.ifname
,用於自定義將容器連線到網路時使用的介面名稱。Linux 上的所有內建網路驅動程式均支援此標籤。 moby/moby#49155- 當建立指定了多個網路的容器時,無法保證網路連線到容器的順序。因此,如果自定義介面名稱使用與自動生成名稱相同的名稱字首(例如
eth
),容器可能無法啟動。 - 推薦的做法是使用不同的字首(例如
en0
),或者使用足夠大的數字字尾以避免衝突(例如eth100
)。 - 在
docker network connect
命令中,可以透過--driver-opt
標誌指定此標籤,例如docker network connect --driver-opt=com.docker.network.endpoint.ifname=foobar …
。 - 或者在
docker run
命令中使用長格式的--network
標誌,例如docker run --network=name=bridge,driver-opt=com.docker.network.endpoint.ifname=foobar …
。
- 當建立指定了多個網路的容器時,無法保證網路連線到容器的順序。因此,如果自定義介面名稱使用與自動生成名稱相同的名稱字首(例如
- 如果自定義網路驅動程式報告支援
GwAllocChecker
能力,那麼在網路建立之前,它將收到一個包含網路選項的GwAllocCheckerRequest
請求。然後,自定義驅動程式可以回覆不應分配閘道器 IP 地址。 moby/moby#49372
橋接網路中的埠釋出
dockerd
現在需要 Linux 核心支援ipset
。moby/moby#48596- 用於實現埠釋出和網路隔離的
iptables
和ip6tables
規則已進行了廣泛修改。這啟用了以下一些功能更改,並且是重構以在未來版本中啟用本地nftables
支援的第一步。moby/moby#48815 - 如果需要降級到較早版本的守護程序,則需要手動清理新規則。最簡單且最可靠的方法是重啟主機,或者在啟動較早版本守護程序之前,使用
iptables -F
和ip6tables -F
清空filter
表中的所有現有iptables
規則。如果無法這樣做,請以 root 身份執行以下命令:iptables -D FORWARD -m set --match-set docker-ext-bridges-v4 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; ip6tables -D FORWARD -m set --match-set docker-ext-bridges-v6 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -D FORWARD -m set --match-set docker-ext-bridges-v4 dst -j DOCKER; ip6tables -D FORWARD -m set --match-set docker-ext-bridges-v6 dst -j DOCKER
- 如果您之前以
ACCEPT
設定了 iptables filter-FORWARD 策略,並且需要恢復對未釋出埠的訪問,還需要刪除DOCKER
鏈中的每個橋接網路的規則。例如,iptables -D DOCKER ! -i docker0 -o docker0 -j DROP
。
- 用於實現埠釋出和網路隔離的
- 修復了一個安全問題,該問題曾允許遠端主機直接連線到容器的已釋出埠。moby/moby#49325
- 修復了一個安全問題,該問題曾允許鄰居主機連線到對映在迴環地址上的埠。moby/moby#49325
- 修復了阻止埠釋出到本地連結地址的問題。moby/moby#48570
- 現在,透過主機的公共 IP 地址,同一主機上其他網路中的容器可以可靠地訪問容器釋出的 UDP 埠。moby/moby#48571
- 現在,只有當 Docker 在主機本身上啟用 IP 轉發時(sysctl 引數
net.ipv6.conf.all.forwarding
和net.ipv6.conf.default.forwarding
),Docker 才會將ip6tables
filter 表中FORWARD
鏈的策略設定為DROP
。這與現有的 IPv4 行為保持一致。moby/moby#48594- 如果您的主機上啟用了 IPv6 轉發,但您之前依賴 Docker 將 ip6tables filter-FORWARD 策略設定為
DROP
,您可能需要更新主機的配置以確保其安全。
- 如果您的主機上啟用了 IPv6 轉發,但您之前依賴 Docker 將 ip6tables filter-FORWARD 策略設定為
- 現在,在
DOCKER
iptables 鏈中阻止了透過直接路由訪問未使用-p
/--publish
暴露的容器埠。moby/moby#48724- 如果主機上預設的 iptables filter-FORWARD 策略之前被設定為
ACCEPT
,並且仍然需要從遠端主機直接路由訪問容器的未釋出埠,可選項包括:- 釋出您需要的埠。
- 使用下面描述的新選項
gateway_mode_ipv[46]=nat-unprotected
。
- 釋出到主機地址的容器埠將繼續透過這些主機地址(使用 NAT 或使用者空間代理)進行訪問。
- 未釋出的容器埠仍可從 Docker 主機透過容器的 IP 地址直接訪問。
- 如果主機上預設的 iptables filter-FORWARD 策略之前被設定為
- 使用
gateway_mode_ipv[46]=routed
建立的網路現在可以從同一 Docker 主機上執行的其他橋接網路以及主機外部訪問。moby/moby#48596 - 橋接驅動選項
com.docker.network.bridge.gateway_mode_ipv4
和com.docker.network.bridge.gateway_mode_ipv6
現在接受模式nat-unprotected
。moby/moby#48597nat-unprotected
類似於預設的nat
模式,但不為每個埠/協議設定規則。這意味著可以透過直接路由從遠端主機訪問容器上的任何埠。
- 當網路也是
internal
時,橋接驅動選項com.docker.network.bridge.gateway_mode_ipv4
和com.docker.network.bridge.gateway_mode_ipv6
現在接受模式isolated
。moby/moby#49262- 在
internal
網路中,通常會為橋接裝置分配地址。因此,Docker 主機上的程序可以訪問該網路,網路中的容器可以訪問偵聽該橋接地址上的主機服務(包括偵聽在主機任何地址,0.0.0.0
或::
上的服務)。 - 使用 gateway 模式
isolated
建立的internal
橋接網路在 Docker 主機上沒有地址。
- 在
- 當埠對映包含一個因使用
--gateway_mode_ipv[46]
停用主機 NAT 而無法使用的主機 IP 地址或埠號時,容器建立將不再失敗。如果在連線或斷開網路時 gateway endpoint 發生變化,可能需要這些未使用的欄位。日誌中會記錄有關未使用欄位的訊息。moby/moby#48575 - 當用戶空間代理啟用時,不要為容器自己的已釋出埠建立 iptables nat-POSTROUTING masquerade 規則。moby/moby#48854
IPv6
- 新增
docker network create
選項--ipv4
。要停用網路的 IPv4 地址分配,請使用docker network create --ipv4=false [...]
。docker/cli#5599 - 守護程序選項
--ipv6
(在daemon.json
中為"ipv6": true
)現在可以單獨使用,無需與fixed-cidr-v6
一起使用。moby/moby#48319 - IPAM 現在可以處理大於 "/64" 的子網。moby/moby#49223
- 現在,橋接網路所屬橋接裝置分配的地址已停用重複地址檢測 (DAD)。moby/moby#48609
- 修改了
host-gateway
,以相容僅 IPv6 的網路。moby/moby#48807- 當在
--add-host
選項中使用特殊值host-gateway
代替地址時,它會被 Docker 主機上的一個地址替換,以便可以透過名稱引用主機。使用的地址屬於預設橋接網路(通常是docker0
)。到目前為止,它一直是 IPv4 地址,因為橋接網路上的所有容器都有 IPv4 地址。 - 現在,如果在預設橋接網路上啟用了 IPv6,則會為 IPv4 和 IPv6 地址建立
/etc/hosts
條目。因此,僅連線到僅 IPv6 網路的容器可以透過名稱訪問主機。 --host-gateway-ip
選項會覆蓋用於替換host-gateway
的地址。命令列上現在允許使用兩個這樣的選項,分別用於一個 IPv4 gateway 和一個 IPv6。- 在
daemon.json
檔案中,要提供兩個地址,請使用"host-gateway-ips"
。例如,"host-gateway-ips": ["192.0.2.1", "2001:db8::1111"]
。
- 當在
錯誤修復和增強功能
- 預設新增 IPv6 迴環地址作為不安全登錄檔。moby/moby#48540
- 新增對 Cobra 生成的
dockerd
補全指令碼的支援。moby/moby#49339 - 修復透過
systemd
在啟動時自動啟動容器時 DNS 查詢失敗的問題。moby/moby#48812 - 修復 Docker Swarm 模式忽略
volume.subpath
的問題。docker/cli#5833 - 修復
docker export
在操作取消後仍繼續匯出的問題。moby/moby#49265 - 修復
docker export
在失敗後不釋放容器可寫層的問題。moby/moby#48517 - 修復
docker images --tree
在有多個名稱可用時,不必要地截斷長映象名稱的問題。docker/cli#5757 - 修復了守護程序啟動時,名稱與另一個容器 ID 匹配的容器無法恢復的 bug。moby/moby#48669
- 修復
docker ps
顯示的一些 IPv6 地址未正確用方括號括起來的問題。docker/cli#5468 - 修復
docker run
期間無法取消映象拉取操作的 bug。docker/cli#5645 - 修復將守護程序作為 Windows 服務執行時,錯誤處理不當導致退出不乾淨的問題。moby/moby#48518
- 修復使用
--attach stdout
或--attach stderr
時,docker run
的輸出與使用stdin
時不一致的問題。現在,如果容器退出,docker run --attach stdin
也會退出。docker/cli#5662 - 修復使用 NSS 模組支援的
subid
設定無根 Docker 時的問題。moby/moby#49036 - CLI 生成的補全指令碼現在在每個命令/標誌建議旁邊顯示描述。docker/cli#5756
- 現在,
docker ps
在埠繫結中顯示的 IPv6 地址使用方括號括起來。docker/cli#5363 - 為 Compose 實現了埠驗證方法。docker/cli#5524
- 改進了命令列上無效標誌的錯誤輸出。docker/cli#5233
- 改進了使用另一個容器網路名稱空間啟動容器失敗時的錯誤。moby/moby#49367
- 改進了對無效 API 錯誤的處理,這類錯誤曾可能導致顯示空錯誤訊息。moby/moby#49373
- 改進了未知(子)命令和無效引數的輸出和一致性。docker/cli#5234
- 改進守護程式配置中
exec-opts
的驗證。 moby/moby#48979 - 更新
--gpus=0
標誌的處理方式,使其與 NVIDIA Container Runtime 保持一致。 moby/moby#48482 client.ContainerCreate
現在將HostConfig
中的CapAdd
和CapDrop
欄位規範化為它們的標準形式。 moby/moby#48551docker image save
現在生成穩定的時間戳。 moby/moby#48611docker inspect
現在允許你檢查 Swarm 配置。 docker/cli#5573- containerd 映象儲存:在
docker pull
中新增對Extracting
層狀態的支援。 moby/moby#49064 - containerd 映象儲存:修復了 `commit`、`import` 和 `build` 在替換映象時未將其保留為懸空映象的問題。 moby/moby#48316
- containerd 映象儲存:當請求的平臺未載入時,使 `docker load --platform` 返回錯誤。 moby/moby#48718
- 修復 `--link` 選項的驗證問題。 docker/cli#5739
- 新增對 `network-diagnostic-port` 守護程式配置選項的驗證。 moby/moby#49305
- 除非明確配置,否則在不需要閘道器的情況下不再為閘道器保留 IP 地址。具體來說,包括帶有選項
com.docker.network.bridge.inhibit_ipv4
的“內部”橋接網路,沒有父介面的ipvlan
或macvlan
網路,以及 L3 IPvlan 模式。 moby/moby#49261 - 如果自定義網路驅動程式報告支援
GwAllocChecker
能力,那麼在網路建立之前,它將收到一個包含網路選項的GwAllocCheckerRequest
請求。然後,自定義驅動程式可以回覆不應分配閘道器 IP 地址。 moby/moby#49372 - 修復了一個問題,該問題導致容器無法同時連線到 L3 IPvlan 和其他網路型別。 moby/moby#49130
- 斷開容器與網路連線時,移除正確的
/etc/hosts
條目。 moby/moby#48857 - 修復重複的網路斷開事件。 moby/moby#48800
- 解決了與更改
docker0
的fixed-cidr
相關的問題,以及從使用者管理的預設橋接 (--bridge
) 推斷配置的問題。 moby/moby#48319 - 移除特性標誌
windows-dns-proxy
,該標誌在版本 26.1.0 中引入,用於控制 Windows 容器向外部 DNS 解析器轉發,以便使nslookup
工作。該標誌在版本 27.0.0 中已預設啟用。 moby/moby#48738 - 移除用於 SCTP 校驗和的
iptables
mangle 規則。可以透過在守護程式環境中設定DOCKER_IPTABLES_SCTP_CHECKSUM=1
來重新啟用該規則。此覆蓋設定將在未來版本中移除。 moby/moby#48149 - 在大多數情況下,連線到橋接網路的速度更快。 moby/moby#49302
打包更新
- 更新 Go 執行時至 1.23.6。 docker/cli#5795, moby/moby#49393, docker/docker-ce-packaging#1161
- 更新
runc
至 v1.2.5(僅靜態二進位制檔案)。 moby/moby#49464 - 更新 containerd 至 v1.7.25。 moby/moby#49252
- 更新 BuildKit 至 v0.20.0。 moby/moby#49495
- 更新 Buildx 至 v0.21.0。 docker/docker-ce-packaging#1166
- 更新 Compose 至 v2.32.3。 docker/docker-ce-packaging#1143
dockerd(8)
手冊頁的規範來源已移回moby/moby
倉庫本身。 moby/moby#48298
Go SDK
- 改進空物件 ID 的驗證。客戶端在使用空 ID 或名稱時現在返回“Invalid Parameter”錯誤。這將某些“Inspect”函式返回的錯誤從“Not found”錯誤更改為“Invalid Parameter”。 moby/moby#49381
Client.ImageBuild()
現在從 API 請求的查詢字串中省略預設值。 moby/moby#48651api/types/container
:合併Stats
和StatsResponse
。 moby/moby#49287client.WithVersion
:設定 API 版本時去除 v 字首。 moby/moby#49352client
:新增WithTraceOptions
,允許指定自定義 OTe1 跟蹤選項。 moby/moby#49415client
:新增HijackDialer
介面。 moby/moby#49388client
:新增SwarmManagementAPIClient
介面,用於描述所有與 Swarm 特定物件相關的 API 客戶端方法。 moby/moby#49388client
:新增WithTraceOptions
,允許指定自定義 OTel 跟蹤選項。 moby/moby#49415client
:ImageHistory
、ImageLoad
和ImageSave
現在使用可變引數函式選項 (variadic functional options)。 moby/moby#49466pkg/containerfs
:移至內部 (internal)。 moby/moby#48097pkg/reexec
:現在可在除 Linux、Windows、macOS 和 FreeBSD 之外的其他平臺使用。 moby/moby#49118api/types/container
:引入CommitResponse
型別。目前是IDResponse
的別名,但在未來版本中可能會成為獨立型別。 moby/moby#49444api/types/container
:引入ExecCreateResponse
型別。目前是IDResponse
的別名,但在未來版本中可能會成為獨立型別。 moby/moby#49444
API
- 更新 API 版本至 v1.48 moby/moby#48476
GET /images/{name}/json
響應現在返回Manifests
欄位,其中包含映象索引中包含的子清單資訊。這包括平臺特定清單和構建證明等內容。 moby/moby#48264POST /containers/create
現在支援型別為image
的Mount
,用於在容器內部掛載映象。 moby/moby#48798GET /images/{name}/history
現在支援一個platform
引數(JSON 編碼的 OCI Platform 型別),允許你指定要顯示歷史記錄的平臺。 moby/moby#48295POST /images/{name}/load
和GET /images/{name}/get
現在支援一個platform
引數(JSON 編碼的 OCI Platform 型別),允許你指定要載入/儲存的平臺。不傳遞此引數將載入/儲存完整的多平臺映象。 moby/moby#48295- 改進容器和 exec 調整大小時無效寬度/高度的錯誤提示。 moby/moby#48679
POST /containers/create
端點現在在響應中包含警告,當將容器範圍的VolumeDriver
選項與透過Mounts
定義的卷結合使用時,因為VolumeDriver
選項對這些卷沒有效果。此警告以前由 CLI 生成。 moby/moby#48789- containerd 映象儲存:
GET /images/json
和GET /images/{name}/json
響應現在包含Descriptor
欄位,其中包含映象目標的 OCI 描述符。新欄位僅在守護程序提供多平臺映象儲存時填充。 moby/moby#48894 - containerd 映象儲存:
GET /containers/{name}/json
現在返回一個ImageManifestDescriptor
欄位,其中包含用於建立容器的映象的特定平臺映象清單的 OCI 描述符。 moby/moby#48855 - 新增除錯端點(
GET /debug/vars
,GET /debug/pprof/
,GET /debug/pprof/cmdline
,GET /debug/pprof/profile
,GET /debug/pprof/symbol
,GET /debug/pprof/trace
,GET /debug/pprof/{name}
)現在也可以透過帶版本的 API 路徑(/v<API-version>/<endpoint>
)訪問。 moby/moby#49051 - 修復 API 在驗證錯誤時返回
500
狀態碼而不是400
的問題。 moby/moby#49217 - 修復歸檔端點(
HEAD /containers/{name:.*}/archive
,GET /containers/{name:.*}/archive
,PUT /containers/{name:.*}/archive
)返回500
狀態而不是400
狀態的問題。 moby/moby#49219 POST /containers/create
現在在HostConfig.SecurityOpt
中接受writable-cgroups=true
選項,用於將容器的 cgroups 掛載為可寫。這提供了一種比HostConfig.Privileged
更精細的方法。 moby/moby#48828POST /build/prune
將keep-bytes
重新命名為reserved-space
,現在支援額外的清理引數max-used-space
和min-free-space
。 moby/moby#48720POST /networks/create
現在有一個EnableIPv4
欄位。將其設定為false
會停用該網路的 IPv4 IPAM。 moby/moby#48271GET /networks/{id}
現在返回一個EnableIPv4
欄位,顯示該網路是否啟用了 IPv4 IPAM。 moby/moby#48271- 使用者定義的 bridge 網路需要啟用 IPv4 或 IPv6 地址分配。預設的 bridge 網路(
docker0
)不能停用 IPv4。 moby/moby#48323 - 可以建立停用 IPv4、IPv6 或同時停用這兩種地址族的地址分配的
macvlan
和ipvlan
網路。 moby/moby#48299 - Windows 或 Swarm 網路不能停用 IPv4。 moby/moby#48278
- 添加了一種方法來指定哪個網路應為容器提供預設閘道器。 moby/moby#48936
POST /networks/{id}/connect
和POST /containers/create
現在在EndpointsConfig
中接受一個GwPriority
欄位。該值用於確定哪個網路端點為容器提供預設閘道器。將選擇優先順序最高的端點。如果多個端點具有相同的優先順序,則按網路名稱進行字典排序,並選擇排序靠前的端點。 moby/moby#48746GET /containers/json
現在在每個網路端點的NetworkSettings
中返回一個GwPriority
欄位。CLI 的新選項gw-priority
會在docker run
和docker network connect
命令中使用GwPriority
欄位。 moby/moby#48746
--sysctl
選項中針對eth0
的設定不再自動遷移到網路端點。 moby/moby#48746- 例如,在 Docker CLI 中,
docker run --network mynet --sysctl net.ipv4.conf.eth0.log_martians=1 ...
會被拒絕。您必須改用docker run --network name=mynet,driver-opt=com.docker.network.endpoint.sysctls=net.ipv4.conf.IFNAME.log_martians=1 ...
。
- 例如,在 Docker CLI 中,
GET /containers/json
現在返回一個ImageManifestDescriptor
欄位,與/containers/{name}/json
中的欄位一致。該欄位僅在守護程序提供多平臺映象儲存時填充。 moby/moby#49407
已移除
- Fluent 日誌驅動選項
fluentd-async-connect
在 v20.10 中已被棄用,現在已被移除。 moby/moby#46114 docker stop
和docker restart
命令上的--time
選項已被棄用,並重命名為--timeout
。 docker/cli#5485- Go-SDK:
pkg/ioutils
:移除NewReaderErrWrapper
,因為它從未使用過。 moby/moby#49258 - Go-SDK:
pkg/ioutils
:移除已棄用的BytesPipe
,NewBytesPipe
,ErrClosed
,WriteCounter
,NewWriteCounter
,NewReaderErrWrapper
,NopFlusher
。 moby/moby#49245 - Go-SDK:
pkg/ioutils
:移除已棄用的NopWriter
和NopWriteCloser
。 moby/moby#49256 - Go-SDK:
pkg/sysinfo
:移除已棄用的 NumCPU。 moby/moby#49242 - Go-SDK:移除
pkg/broadcaster
,因為它只在內部使用。 moby/moby#49172 - Go-SDK:移除已棄用的
cli.Errors
型別。 docker/cli#5549 - 移除
pkg/ioutils.ReadCloserWrapper
,因為它只在測試中使用。 moby/moby#49237 - 移除已棄用的
api-cors-header
配置引數和dockerd
的--api-cors-header
選項。 moby/moby#48209 - 移除已棄用的
APIEndpoint.Version
欄位、APIVersion
型別以及APIVersion1
和APIVersion2
常量。 moby/moby#49004 - 移除已棄用的
api-cors-header
配置引數和 Docker 守護程序的--api-cors-header
選項。 docker/cli#5437 - 移除已棄用的
pkg/directory
包。 moby/moby#48779 - 移除已棄用的
pkg/dmsg.Dmesg()
。 moby/moby#48109 - 移除已棄用的 image/spec 包,該包已移至單獨的模組(
github.com/moby/docker-image-spec
)。 moby/moby#48460 - 移除已棄用
logentries
日誌驅動程式的遷移程式碼和錯誤。 moby/moby#48891 - 移除對已棄用的外部 graph-driver 外掛的支援。 moby/moby#48072
api/types
:移除已棄用的container.ContainerNode
和ContainerJSONBase.Node
欄位。 moby/moby#48107api/types
:移除已棄用的別名:ImagesPruneReport
,VolumesPruneReport
,NetworkCreateRequest
,NetworkCreate
,NetworkListOptions
,NetworkCreateResponse
,NetworkInspectOptions
,NetworkConnect
,NetworkDisconnect
,EndpointResource
,NetworkResource
,NetworksPruneReport
,ExecConfig
,ExecStartCheck
,ContainerExecInspect
,ContainersPruneReport
,ContainerPathStat
,CopyToContainerOptions
,ContainerStats
,ImageSearchOptions
,ImageImportSource
,ImageLoadResponse
,ContainerNode
。 moby/moby#48107libnetwork/iptables
:移除已棄用的IPV
,Iptables
,IP6Tables
和Passthrough()
。 moby/moby#49121pkg/archive
:移除已棄用的CanonicalTarNameForPath
,NewTempArchive
,TempArchive
。 moby/moby#48708pkg/fileutils
:移除已棄用的GetTotalUsedFds
。 moby/moby#49210pkg/ioutils
:移除OnEOFReader
,因為它只在內部使用。 moby/moby#49170pkg/longpath
:移除已棄用的Prefix
常量。 moby/moby#48779pkg/stringid
:移除已棄用的IsShortID
和ValidateID
函式。 moby/moby#48705runconfig/opts
: 刪除已棄用的ConvertKVStringsToMap
moby/moby#48102runconfig
: 刪除已棄用的ContainerConfigWrapper
,SetDefaultNetModeIfBlank
,DefaultDaemonNetworkMode
,IsPreDefinedNetwork
moby/moby#48102container
: 刪除已棄用的ErrNameReserved
,ErrNameNotReserved
. moby/moby#48728- 移除
Daemon.ContainerInspectCurrent()
方法並更改Daemon.ContainerInspect()
簽名以接受backend.ContainerInspectOptions
結構體 moby/moby#48672 - 刪除已棄用的
Daemon.Exists()
和Daemon.IsPaused()
方法。 moby/moby#48723
已棄用
- API:
GET /info
響應中的BridgeNfIptables
和BridgeNfIp6tables
欄位現在始終為false
,並在 API v1.49 中省略。netfilter 模組現在按需載入,不再在守護程序啟動期間載入,這使得這些欄位已過時。 moby/moby#49114 - API: 對於返回 JSON 進度響應的流式端點(例如
POST /images/create
、POST /images/{name}/push
和POST /build
),其中的error
和progress
欄位已棄用。 moby/moby#49447- 使用者應改用
errorDetail
和progressDetail
欄位中的資訊。 - 這些欄位分別在 API v1.4 (docker v0.6.0) 和 API v1.8 (docker v0.7.1) 中被標記為已棄用,但仍會返回。
- 這些欄位在未來的 API 版本中將留空或被省略。
- 使用者應改用
- 棄用
Daemon.Register()
。此函式未使用,並將在下一版本中移除。 moby/moby#48702 - 棄用
client.ImageInspectWithRaw
函式,轉而使用新的client.ImageInspect
。 moby/moby#48264 - 棄用
daemon/config.Config.ValidatePlatformConfig()
。此方法曾用作config.Validate
的輔助方法,應改用後者。 moby/moby#48985 - 棄用
pkg/reexec
。此包已棄用並移至單獨的模組。請改用github.com/moby/sys/reexec
。 moby/moby#49129 - 棄用用於推送不可分發工件的配置 docker/cli#5724
- 棄用
--allow-nondistributable-artifacts
守護程序標誌以及daemon.json
中相應的allow-nondistributable-artifacts
欄位。設定任一選項將不再生效,但會新增一個棄用警告日誌以提高對棄用的意識。 moby/moby#49065 - 棄用
GET /info
API 響應中的RegistryConfig.AllowNondistributableArtifactsCIDRs
和RegistryConfig.AllowNondistributableArtifactsHostnames
欄位。對於 API 版本 v1.48 及更早版本,這些欄位仍包含在響應中,但始終為null
。在 API 版本 v1.49 及更高版本中,這些欄位將完全被省略。 moby/moby#49065 - Go-SDK: 棄用
registry.ServiceOptions.AllowNondistributableArtifacts
欄位。 moby/moby#49065 - Go-SDK:
api/types/system.Info
中的BridgeNfIptables
、BridgeNfIp6tables
欄位以及pkg/sysinfo.SysInfo
中的BridgeNFCallIPTablesDisabled
、BridgeNFCallIP6TablesDisabled
欄位已棄用,並將在下一版本中移除。 moby/moby#49114 - Go-SDK:
client
: 棄用CommonAPIClient
介面,轉而使用APIClient
介面。CommonAPIClient
將在下一版本中更改為APIClient
的別名,並在再下一版本中移除。 moby/moby#49388 - Go-SDK:
client
: 棄用ErrorConnectionFailed
輔助函式。此函式僅在內部使用,並將在下一版本中移除。 moby/moby#49389 - Go-SDK:
pkg/ioutils
: 棄用NewAtomicFileWriter
,AtomicWriteFile
,AtomicWriteSet
,NewAtomicWriteSet
,轉而使用pkg/atomicwriter
中的對應項。 moby/moby#49171 - Go-SDK:
pkg/sysinfo
: 棄用NumCPU
。此實用工具與runtime.NumCPU
具有相同的行為。 moby/moby#49241 - Go-SDK:
pkg/system
: 棄用MkdirAll
。此函式為 Windows GUID 卷路徑提供了自定義處理。Go 標準庫在 go1.22 及更高版本中已支援此類路徑的處理,此函式現為os.MkdirAll
的別名,應改用後者。此別名將在下一版本中移除。 moby/moby#49162 - Go-SDK: 棄用
pkg/parsers.ParseKeyValueOpt
。 moby/moby#49177 - Go-SDK: 棄用
pkg/parsers.ParseUintListMaximum
,pkg/parsers.ParseUintList
。這些實用工具僅在內部使用,並將在下一版本中移除。 moby/moby#49222 - Go-SDK: 棄用
api/type.IDResponse
,轉而使用container.CommitResponse
和container.ExecCreateResponse
,它們目前是別名,但在未來版本中可能會成為不同的型別。此型別將在下一版本中移除。 moby/moby#49446 - Go-SDK: 棄用
api/types/container.ContainerUpdateOKBody
,轉而使用UpdateResponse
。此型別將在下一版本中移除。 moby/moby#49442 - Go-SDK: 棄用
api/types/container.ContainerTopOKBody
,轉而使用TopResponse
。此型別將在下一版本中移除。 moby/moby#49442 - Go-SDK:
pkg/jsonmessage
: 修復ProgressMessage
,ErrorMessage
的棄用問題,它們分別在 Docker v0.6.0 和 v0.7.1 中被棄用。 moby/moby#49447 - 將
GraphDriverData
從api/types
移至api/types/storage
。舊型別已棄用,並將在下一版本中移除。 moby/moby#48108 - 將
RequestPrivilegeFunc
從api/types
移至api/types/registry
。舊型別已棄用,並將在下一版本中移除。 moby/moby#48119 - 從
api/types
移至api/types/container
-NetworkSettings
,NetworkSettingsBase
,DefaultNetworkSettings
,SummaryNetworkSettings
,Health
,HealthcheckResult
,NoHealthcheck
,Starting
,Healthy
和Unhealthy
常量,MountPoint
,Port
,ContainerState
,Container
,ContainerJSONBase
,ContainerJSON
,ContainerNode
。舊型別已棄用,並將在下一版本中移除。 moby/moby#48108 - 從
api/types
移至api/types/image
-ImageInspect
,RootFS
。舊型別已棄用,並將在下一版本中移除。 moby/moby#48108 GET /info
端點中的ContainerdCommit.Expected
,RuncCommit.Expected
和InitCommit.Expected
欄位已棄用,並將在 API v1.49 中省略。 moby/moby#48478api/types/registry
: 棄用ServiceConfig.AllowNondistributableArtifactsCIDRs
和ServiceConfig.AllowNondistributableArtifactsHostnames
欄位。這些欄位將在下一版本中移除。 moby/moby#49065api/types/system/Commit.Expected
欄位已棄用,不應再使用。 moby/moby#48478daemon/graphdriver
: 棄用GetDriver()
moby/moby#48079libnetwork/iptables
: 棄用Passthrough
。此函式僅在內部使用,並將在下一版本中移除。 moby/moby#49115pkg/directory.Size()
函式已棄用,並將在下一版本中移除。 moby/moby#48057registry
: 棄用APIEndpoint.TrimHostName
;現在對遠端名稱無條件地修剪主機名。此欄位將在下一版本中移除。 moby/moby#49005daemon.json
中的allow-nondistributable-artifacts
欄位。設定任一選項將不再生效,但會新增一個棄用警告日誌以提高對棄用的意識。此警告計劃在下一版本中變為錯誤。 moby/moby#49065