棄用的 Docker Engine 功能

目錄

本頁概述了 Engine 中已棄用的功能。包裝和支援的(Linux)發行版更改不包括在內。要了解 Linux 發行版停止支援的資訊,請參閱發行說明

功能棄用策略

隨著 Docker 的更改,有時需要刪除現有功能或將其替換為新功能。在刪除現有功能之前,它會在文件中標註為“已棄用”,並在 Docker 中保留至少一個穩定版本,除非另有明確說明。此後可能會被刪除。

使用者應注意每個版本的棄用功能列表,並儘快計劃從這些功能遷移開來,並(如果適用)遷移到替換功能。

棄用的引擎功能

下表概述了已棄用功能的當前狀態

  • 已棄用:該功能已標記為“已棄用”,不應再使用。

    該功能可能會在未來版本中被刪除、停用或更改行為。“已棄用”列包含該功能被標記為棄用的版本,而“移除”列包含該功能預計被移除的暫定版本。如果“移除”列中未包含任何版本,則該版本尚未確定。

  • 已移除:該功能已被移除、停用或隱藏。

    有關詳細資訊,請參閱連結部分。某些功能是“軟”棄用的,這意味著它們為了向後相容而保持功能,並允許使用者遷移到替代方案。在這種情況下,可能會列印警告,使用者不應依賴此功能。

狀態特性已棄用移除
已棄用來自 inspect API 的映象配置中的空/nil 欄位v28.3v29.0
已棄用推送不可分發工件的配置v28.0v29.0
已棄用docker stopdocker restart 上的 --time 選項v28.0-
已移除映象 inspect 中的非標準欄位v27.0v28.2
已移除API CORS 頭部v27.0v28.0
已移除Graphdriver 外掛(實驗性)v27.0v28.0
已棄用未認證的 TCP 連線v26.0v28.0
已移除映象 inspect 中的 ContainerContainerConfig 欄位v25.0v26.0
已移除棄用舊版 API 版本v25.0v26.0
已移除網路 Aliases 欄位中的容器短 IDv25.0v26.0
已移除IsAutomated 欄位以及 docker search 上的 is-automated 過濾器v25.0v28.2
已移除logentries 日誌驅動v24.0v25.0
已移除守護程式的 OOM-score 調整v24.0v25.0
已移除BuildKit 構建資訊v23.0v24.0
已棄用Linux 映象的舊版構建器v23.0-
已棄用舊版構建器回退v23.0-
已移除CentOS 7 和 RHEL 7 上的 Btrfs 儲存驅動v20.10v23.0
已移除支援加密的 TLS 私鑰v20.10v23.0
已移除Kubernetes 堆疊和上下文支援v20.10v23.0
已移除從不相容的映象登錄檔拉取映象v20.10v28.2
已移除Windows 上的 Linux 容器 (LCOW)v20.10v23.0
已棄用使用 cgroups v1 的 BLKIO 權重選項v20.10-
已移除核心記憶體限制v20.10v23.0
已移除使用外部鍵/值儲存的經典 Swarm 和 overlay 網路v20.10v23.0
已移除支援用於身份驗證的舊版 ~/.dockercfg 配置檔案v20.10v23.0
已棄用CLI 外掛支援v20.10-
已棄用Dockerfile 舊版 ENV name value 語法v20.10-
已移除docker build --stream 標誌(實驗性)v20.10v20.10
已移除fluentd-async-connect 日誌選項v20.10v28.0
已移除實驗性 CLI 功能的配置選項v19.03v23.0
已移除使用映象清單 v2 schema 1 進行推送和拉取v19.03v28.2
已移除docker engine 子命令v19.03v20.10
已移除頂級 docker deploy 子命令(實驗性)v19.03v20.10
已移除使用“dab”檔案進行 docker stack deploy(實驗性)v19.03v20.10
已移除支援 overlay2.override_kernel_check 儲存選項v19.03v24.0
已移除AuFS 儲存驅動v19.03v24.0
已移除舊版“overlay”儲存驅動v18.09v24.0
已移除Device mapper 儲存驅動v18.09v25.0
已移除在引擎標籤中使用保留名稱空間v18.06v20.10
已移除--disable-legacy-registry 覆蓋守護程式選項v17.12v19.03
已移除與 V1 登錄檔互動v17.06v17.12
已移除預設情況下 service createservice update 非同步執行v17.05v17.10
已移除dockerd 上的 -g--graph 標誌v17.05v23.0
已棄用NetworkSettings 中的頂級網路屬性v1.13v17.12
已移除/images/json 端點的 filter 選項v1.13v20.10
已移除repository:shortid 映象引用v1.13v17.12
已移除docker daemon 子命令v1.13v17.12
已移除引擎標籤中具有衝突值的重複鍵v1.13v17.12
已棄用Dockerfile 中的 MAINTAINERv1.13-
已棄用沒有版本的 API 呼叫v1.13v17.12
已移除沒有 d_type 支援的 overlay/overlay2 後備檔案系統v1.13v17.12
已移除docker search 上的 --automated--stars 標誌v1.12v20.10
已棄用--help 的簡寫 -hv1.12v17.09
已移除docker login 上的 -e--email 標誌v1.11v17.06
已棄用docker run--security-opt 標誌的分隔符(:v1.11v17.06
已棄用API 中模糊的事件欄位v1.10-
已移除docker tag 上的 -f 標誌v1.10v1.12
已移除API 容器啟動時的 HostConfigv1.10v1.12
已移除docker ps 上的 --before--since 標誌v1.10v1.12
已移除驅動程式特定的日誌標籤v1.9v1.12
已移除Docker Content Trust ENV 密碼變數名稱更改v1.9v1.12
已移除/containers/(id or name)/copy 端點v1.8v1.12
已移除LXC 內建 exec 驅動v1.8v1.10
已移除舊的命令列選項v1.8v1.10
已移除dockerd 上的 --api-enable-cors 標誌v1.6v17.09
已移除docker commit 上的 --run 標誌v0.10v1.13
已移除docker import 中的三個引數形式v0.6.7v1.12

來自 inspect API 的映象配置中的空/nil 欄位

在版本 v28.3 中棄用 計劃在版本 v29.0 中移除

docker image inspect(以及 GET /images/{name}/json API 端點)返回的 Config 欄位目前即使為空或 nil 也包含某些欄位。從 Docker v29.0 開始,當這些欄位包含空值或預設值時,將從 API 響應中省略以下欄位

  • Cmd
  • Entrypoint
  • Env
  • Labels
  • OnBuild
  • 使用者
  • WorkingDir

使用映象 inspect API 的應用程式應更新以優雅地處理這些欄位的缺失,將缺失欄位視為具有其預設/空值。

對於對應於 Docker v29.0 的 API 版本,這些欄位在為空時將被省略。在使用請求舊 API 版本的客戶端時,它們將繼續包含在內以實現向後相容性。

推送不可分發工件的配置

在版本 v28.0 中棄用 計劃在版本 v29.0 中移除

不可分發工件(也稱為外部層)是在 Docker v1.12 中引入的,用於容納 Windows 映象,其 EULA 不允許透過 Microsoft 託管的登錄檔以外的登錄檔分發層。外部/不可分發層的概念在 oci#233 中被 OCI 分發規範採納。這些限制後來放寬,允許透過非公共登錄檔分發這些映象,為此在 Docker v17.0.6.0 中添加了配置。

2022 年,微軟更新了 EULA 並取消了這些限制,隨後 OCI 分發規範在 oci#965 中棄用了外部層。2023 年,微軟取消了其映象中外部資料層的使用,使此功能過時。

Docker v28.0 棄用了 --allow-nondistributable-artifacts 守護程式標誌以及 daemon.json 中相應的 allow-nondistributable-artifacts 欄位。設定任一選項不再生效,但會新增棄用警告日誌以提高對棄用的認識。此警告計劃在 Docker v29.0 中成為錯誤。

因此,建議當前使用這些選項的使用者從其配置中刪除此選項,以防止在升級到 Docker v29.0 時守護程式無法啟動。

GET /info API 響應中 RegistryConfigAllowNondistributableArtifactsCIDRsAllowNondistributableArtifactsHostnames 欄位也已棄用。對於 API 版本 v1.48 及更低版本,這些欄位仍包含在響應中,但始終為 null。在 API 版本 v1.49 及更高版本中,該欄位將完全省略。

docker stopdocker restart 上的 --time 選項

在版本 v28.0 中棄用

docker stopdocker container stopdocker restartdocker container restart 命令的 --time 選項已重新命名為 --timeout,以與其他超時選項保持一致。--time 選項現已棄用並隱藏,但為向後相容性仍可使用。建議使用者改用 --timeout 選項。

映象 inspect 中的非標準欄位

在版本 v27.0 中棄用 在版本 v28.2 中移除

docker image inspect 中顯示(以及 GET /images/{name}/json API 端點返回)的 Config 欄位返回的附加欄位不屬於映象的配置,也不屬於 Docker 映象規範OCI 映象規範

這些欄位從未設定(並且總是返回型別的預設值),但在為空時不會從響應中省略。由於這些欄位不打算成為映象配置響應的一部分,因此它們已被棄用,並將在下一個版本中從 API 中刪除。

以下欄位不屬於底層映象的 Config 欄位,並且在 API v1.50 及更高版本(對應於 v28.2)的 API 響應中已刪除。當使用使用舊 API 版本的客戶端時,它們將繼續包含在內

  • Hostname
  • Domainname
  • AttachStdin
  • AttachStdout
  • AttachStderr
  • Tty
  • OpenStdin
  • StdinOnce
  • Image
  • NetworkDisabled(除非在舊 API 版本上設定,否則省略)
  • MacAddress(除非在舊 API 版本上設定,否則省略)
  • StopTimeout(除非在舊 API 版本上設定,否則省略)

Graphdriver 外掛(實驗性)

在版本 v27.0 中棄用 在版本 v27.0 中預設停用 計劃在版本 v28.0 中移除

Graphdriver 外掛是一個實驗性功能,允許使用自定義儲存驅動程式擴充套件 Docker Engine 以儲存映象和容器。此功能自誕生以來一直未維護。

Graphdriver 外掛的支援在 v27.0 中預設停用,並在 v28.0 中移除。建議此功能的使用者改為配置 Docker Engine 使用 containerd 映象儲存和自定義 快照器

API CORS 頭部

在版本 v27.0 中棄用 在版本 v27.0 中預設停用 在版本 v28.0 中移除

Docker 守護程式的 api-cors-header 配置選項不安全,因此已棄用並計劃移除。錯誤設定此選項可能會為未經身份驗證的跨域請求被守護程式接受留下機會。

在 Docker Engine v27.0 中,此標誌仍可設定,但除非環境變數 DOCKERD_DEPRECATED_CORS_HEADER 也設定為非空值,否則它無效。

此標誌已在 v28.0 中完全移除。

對於授權外掛和依賴此選項透過瀏覽器訪問 Docker API 的其他程式來說,這是一個重大更改。如果需要透過瀏覽器訪問 API,請使用反向代理。

未認證的 TCP 連線

在版本 v26.0 中棄用 計劃在版本 v28.0 中移除

將 Docker 守護程式配置為偵聽 TCP 地址將需要強制 TLS 驗證。此更改旨在透過防止未經授權透過可能不安全的網路訪問 Docker 守護程式來確保安全通訊。此強制 TLS 要求適用於所有 TCP 地址,除了 tcp://

在版本 27.0 及更高版本中,如果守護程式還配置為接受透過 TCP 的遠端連線,則指定 --tls=false--tlsverify=false CLI 標誌會導致守護程式啟動失敗。這也適用於 daemon.json 中的等效配置選項。

為了方便透過 TCP 遠端訪問 Docker 守護程式,您需要實施 TLS 驗證。這透過加密傳輸中的資料並提供相互身份驗證機制來保護連線。

對於不需要遠端守護程式訪問的環境,我們建議將 Docker 守護程式繫結到 Unix 套接字。對於需要遠端訪問但 TLS 加密不可行的守護程式,您可以考慮使用 SSH 作為替代解決方案。

有關配置 Docker 守護程式 TLS(或 SSH)的更多資訊、幫助和分步說明,請參閱保護 Docker 守護程式套接字

映象 inspect 中的 ContainerContainerConfig 欄位

在版本 v25.0 中棄用 在版本 v26.0 中移除

docker inspect 返回的 ContainerContainerConfig 欄位主要是經典(非 BuildKit)映象構建器的實現細節。這些欄位不可移植,在使用基於 BuildKit 的構建器(自 v23.0 起預設啟用)時為空。這些欄位在 v25.0 中已棄用,並從 v26.0(API 版本 v1.45 及更高版本)開始省略。如果需要映象的配置,可以從 Config 欄位中獲取。

棄用舊版 API 版本

在版本 v25.0 中棄用 計劃在版本 v26.0 中移除

Docker 守護程式提供版本化 API 以實現與舊客戶端的向後相容性。Docker 客戶端可以執行 API 版本協商以選擇守護程式支援的最新 API 版本(必要時降級到舊版本 API)。API 版本協商是在 Docker v1.12.0(API 1.24)中引入的,在此之前的客戶端使用固定 API 版本。

透過 v25.0 的 Docker Engine 版本提供對給定平臺穩定版本中包含的所有 API 版本的支援。對於 Linux 上的 Docker 守護程式,最早支援的 API 版本是 1.12(對應於 Docker Engine v1.0.0),而對於 Windows 上的 Docker 守護程式,最早支援的 API 版本是 1.24(對應於 Docker Engine v1.12.0)。

支援舊版 API 版本(在當前版本的 Docker Engine 上提供舊 API 版本)主要是為了提供與最近但仍受支援的客戶端版本的相容性,這是一種常見情況(Docker 守護程式可能更新到最新版本,但並非所有客戶端都可能最新,反之亦然)。對在此之前的 API 版本的支援(由 Docker 守護程式的 EOL 版本提供的 API 版本)是在“盡力而為”的基礎上提供的。

舊 API 版本的使用很少,並且對舊版 API 版本的支援涉及顯著的複雜性(Docker 1.0.0 已釋出 10 年)。因此,我們將開始棄用對舊版 API 版本的支援。

Docker Engine v25.0 預設停用早於 1.24 的 API 版本(使 Linux 和 Windows 守護程式之間的最低支援 API 版本對齊)。當使用使用早於 1.24 的 API 版本的客戶端連線時,守護程式會返回錯誤。以下示例將 Docker CLI 配置為使用 API 版本 1.23,這會產生錯誤

DOCKER_API_VERSION=1.23 docker version
Error response from daemon: client version 1.23 is too old. Minimum supported API version is 1.24,
upgrade your client to a newer version

對低於 1.24 的 API 版本的支援已在 Docker Engine v26 中永久移除,並且最低支援 API 版本將在之後的版本中逐步提高。

網路 Aliases 欄位中的容器短 ID

在版本 v25.0 中棄用 在版本 v26.0 中移除

docker inspect 返回的 Aliases 欄位在容器啟動後包含容器短 ID。此行為在 v25.0 中已棄用,但保留到下一個版本 v26.0。從該版本開始,Aliases 欄位將僅包含透過 docker container createdocker run 標誌 --network-alias 設定的別名。

v25.0 中引入了一個新欄位 DNSNames,其中包含容器名稱(如果已指定)、主機名、網路別名以及容器短 ID,應使用它而不是 Aliases 欄位。

在版本 v25.0 中棄用 在版本 v28.2 中移除

is_automated 欄位已透過 Docker Hub 的搜尋 API 棄用。因此,映象搜尋中的 IsAutomated 欄位將來將始終設定為 false,並且搜尋“is-automated=true”將不會產生任何結果。

AUTOMATED 列已從 v25.0 中預設的 docker searchdocker image search 輸出中移除,並且相應的 IsAutomated 模板已在 v28.2 中移除。

Logentries 日誌驅動

在版本 v24.0 中棄用 在版本 v25.0 中移除

Logentries 服務 SaaS 於 2022 年 11 月 15 日關閉,導致此日誌驅動程式無法正常工作。使用者不應再使用此日誌驅動程式,該驅動程式已在 Docker 25.0 中移除。升級後,使用此日誌驅動程式的現有容器將遷移為使用“local”日誌驅動程式。

守護程式的 OOM-score 調整

在版本 v24.0 中棄用 在版本 v25.0 中移除

添加了 oom-score-adjust 選項,以防止守護程式在其他程序之前被 OOM-kill。此選項主要是為了方便,因為將守護程式作為 systemd 單元執行尚未普遍。

讓守護程式自行設定限制不是最佳實踐,最好由啟動守護程式的程序管理器處理。

Docker v20.10 及更高版本預設不再調整守護程式的 OOM 分數,而是將 OOM 分數設定為隨軟體包一起提供的 systemd 單元 (OOMScoreAdjust)。

建議當前依賴此功能的使用者在啟動守護程式時,使用 systemd 或透過其他方式調整守護程式的 OOM 分數。

BuildKit 構建資訊

在版本 v23.0 中棄用 在版本 v24.0 中移除

構建資訊結構已在 BuildKit v0.10.0 中引入,並使用構建元資料生成,允許您檢視構建使用的所有源(映象、Git 倉庫)及其確切版本,以及傳遞給構建的配置。如果生成映象配置,此資訊也會嵌入其中。

Linux 映象的舊版構建器

在版本 v23.0 中棄用

Docker v23.0 現在預設使用 BuildKit 構建 Linux 映象,並使用 Buildx CLI 元件用於 docker build。透過此更改,docker build 現在公開了 BuildKit 提供的所有高階功能,這些功能以前只能透過 docker buildx 子命令獲得。

使用我們的 .deb.rpm 軟體包安裝 docker CLI 時,Buildx 元件會自動安裝,並且在 download.docker.com 上以及透過 Docker Hub 上的 docker/buildx-bin 映象提供靜態連結的二進位制檔案。有關安裝 Buildx 元件的詳細說明,請參閱 Buildx 部分

此版本標誌著 Linux 映象的經典(“舊版”)構建器棄用週期的開始。經典構建器上將不再進行主動開發(錯誤修復除外)。BuildKit 開發始於五年前,自 Docker 18.09 以來已脫離“實驗”階段,並且已經是 Docker Desktop 的預設構建器。儘管我們確信 BuildKit 在一般使用中是穩定的,但行為上可能存在一些變化。如果您在使用 BuildKit 時遇到問題,我們鼓勵您在 BuildKit 的 GitHub 問題跟蹤器{:target="blank" rel="noopener" class=""} 中報告問題

用於構建 Windows 映象的經典構建器

BuildKit 尚不支援構建 Windows 映象,docker build 繼續使用經典構建器在 Windows 守護程式上構建本機 Windows 映象。

舊版構建器回退

在版本 v23.0 中棄用

Docker v23.0 現在預設使用 BuildKit 構建 Linux 映象,這需要 Buildx 元件才能使用 BuildKit 構建映象。在某些情況下,Buildx 元件可能不可用,並且無法使用 BuildKit。

為了提供向 BuildKit 作為預設構建器的平穩過渡,Docker v23.0 在某些情況下具有自動回退,或者產生錯誤以幫助使用者解決問題。

在使用者未明確選擇使用 BuildKit 的情況下(即,未設定 DOCKER_BUILDKIT=1),CLI 會自動回退到經典構建器,但會列印棄用警告

DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.net.tw/go/buildx/

如果使用靜態二進位制檔案安裝 docker CLI 並且 Buildx 元件未安裝或未正確安裝,則可能會出現這種情況。此回退將在未來版本中移除,因此我們建議安裝 Buildx 元件並使用 BuildKit 進行構建,或者使用 DOCKER_BUILDKIT=0 退出使用 BuildKit。

如果您選擇使用 BuildKit (DOCKER_BUILDKIT=1),但 Buildx 元件缺失,則會列印錯誤,並且 docker build 命令失敗

ERROR: BuildKit is enabled but the buildx component is missing or broken.
       Install the buildx component to build images with BuildKit:
       https://docs.docker.net.tw/go/buildx/

我們建議安裝 Buildx 元件以繼續使用 BuildKit 進行構建,但作為替代方案,使用者可以取消設定 DOCKER_BUILDKIT 環境變數以回退到舊版構建器,或者使用 DOCKER_BUILDKIT=0 退出使用 BuildKit。

請注意,經典構建器已棄用,因此在未來版本中,自動回退和退出使用 BuildKit 都將不再可能。

CentOS 7 和 RHEL 7 上的 Btrfs 儲存驅動

在版本 v23.0 中移除

CentOS 和 RHEL 上的 btrfs 儲存驅動程式作為 CentOS 和 RHEL 的技術預覽提供,但自 Red Hat Enterprise Linux 7.4 版本以來已棄用,並在 CentOS 8 和 RHEL 8 中移除。建議 CentOS 上的 btrfs 儲存驅動程式使用者遷移到不同的儲存驅動程式,例如 overlay2,它現在是預設儲存驅動程式。Docker 23.0 繼續提供 btrfs 儲存驅動程式,以允許使用者遷移到替代驅動程式。下一個 Docker 版本將不再提供此驅動程式。

支援加密的 TLS 私鑰

在版本 v20.10 中棄用

在版本 v23.0 中移除

加密 TLS 私鑰的使用已棄用,並已移除。Golang 已棄用對舊版 PEM 加密的支援(如 RFC 1423 中指定),因為它在設計上不安全(請參閱 https://go-review.googlesource.com/c/go/+/264159)。

此功能允許使用加密私鑰和提供的密碼,但由於已知加密已損壞,並且金鑰與密碼一起儲存在檔案系統中,因此不提供額外的安全性。建議使用者解密私鑰,並將其未加密儲存以繼續使用。

Kubernetes 堆疊和上下文支援

在版本 v20.10 中棄用 在版本 v23.0 中移除

在棄用 Compose on Kubernetes 之後,stackcontext 命令中對 Kubernetes 的支援已從 CLI 中移除,與此功能相關的選項現在要麼被忽略,要麼可能產生錯誤。

以下命令列標誌已從 docker context 子命令中移除

  • --default-stack-orchestrator - swarm 現在是堆疊的唯一(也是預設)協調器。
  • --kubernetes - Kubernetes 端點不能再儲存在 docker context 中。
  • --kubeconfig - 將上下文匯出為 kubeconfig 檔案不再受支援。

docker context inspect 子命令生成的輸出不再包含有關新上下文的 StackOrchestratorKubernetes 端點的資訊。

以下命令列標誌已從 docker stack 子命令中移除

  • --kubeconfig - 不再支援使用 kubeconfig 檔案作為上下文。
  • --namespace - 不再支援為堆疊配置 Kubernetes 名稱空間。
  • --orchestrator - swarm 現在是堆疊的唯一(也是預設)協調器。

DOCKER_STACK_ORCHESTRATORDOCKER_ORCHESTRATORKUBECONFIG 環境變數,以及 ~/.docker/config.json CLI 配置檔案中的 stackOrchestrator 選項不再使用,並被忽略。

從不相容的映象登錄檔拉取映象

在版本 v20.10 中棄用 在版本 v28.2 中移除

Docker Engine v20.10 及更高版本包含最佳化功能,可在拉取前驗證本地映象快取中的映象是否需要更新,從而防止 Docker Engine 發出不必要的 API 請求。這些最佳化要求容器映象登錄檔符合 Open Container Initiative Distribution Specification

雖然大多數登錄檔都符合規範,但我們發現有些登錄檔不符合規範,導致 docker pull 失敗。

作為臨時解決方案,Docker Engine v20.10 添加了一個回退機制,允許在使用不相容登錄檔時 docker pull 正常工作。在這種情況下會列印警告訊息

WARNING Failed to pull manifest by the resolved digest. This registry does not
        appear to conform to the distribution registry specification; falling back to
        pull by tag. This fallback is DEPRECATED, and will be removed in a future
        release.

添加回退是為了允許使用者將他們的映象遷移到相容的登錄檔,或者讓這些登錄檔變得相容。

GitHub 棄用了舊版 docker.pkg.github.com 登錄檔,並已在 2025 年 2 月 24 日停用,取而代之的是 GitHub Container Registry (GHCR, ghcr.io),因此不再需要此回退。

Windows 上的 Linux 容器 (LCOW)(實驗性)

在版本 v20.10 中棄用 在版本 v23.0 中移除

在 Windows 上執行 Linux 容器 (LCOW) 的實驗性功能在 Docker 17.09 中作為技術預覽引入。雖然在引入後進行了許多改進,但該功能從未完全完成,現在已停止開發,轉而支援在 WSL2 中原生執行 Linux 上的 Docker。

鼓勵希望在 Windows 主機上執行 Linux 工作負載的開發人員改為使用 帶有 WSL2 的 Docker Desktop

使用 cgroups v1 的 BLKIO 權重選項

在版本 v20.10 中棄用

在使用 cgroups v1 時,指定 blkio 權重(docker run --blkio-weightdocker run --blkio-weight-device)現在已標記為棄用,因為相應的功能已在 Linux 核心 v5.0 及更高版本中移除。在使用 cgroups v2 時,--blkio-weight 選項使用 io.weight 實現。

核心記憶體限制

在版本 v20.10 中棄用 在版本 v23.0 中移除

不再支援指定核心記憶體限制(docker run --kernel-memory),因為 Linux 核心在 v5.4 中棄用了 kmem.limit_in_bytes。OCI 執行時規範現在將此選項(以及 --kernel-memory-tcp)標記為 “不推薦”,並且 runc 等 OCI 執行時不再支援此選項。

Docker API v1.42 及更高版本現在在設定此選項時會忽略它。較舊的 API 版本繼續接受該選項,但根據使用的 OCI 執行時,可能無效。

注意

儘管在 Docker 中尚未棄用,但 OCI 執行時規範也棄用了 memory.kmem.tcp.limit_in_bytes 選項。當使用 runc 作為執行時時,此選項無效。Linux 核心並未明確棄用此功能,並且 runc 問題跟蹤器中有一個跟蹤票證,用於確定是否應恢復此選項或者這是否是 Linux 核心維護者的疏忽(請參閱 opencontainers/runc#3174)。

memory.kmem.tcp.limit_in_bytes 選項僅支援 cgroups v1,並且在執行 cgroups v2 的安裝上不可用。此選項僅由 API 支援,並且未在 docker 命令列上公開。

使用叢集儲存的經典 Swarm 和 overlay 網路

在版本 v20.10 中棄用 在版本 v23.0 中移除

獨立(“經典”)Swarm 已棄用,隨之棄用的是使用外部鍵/值儲存的 overlay 網路。相應的 --cluster-advertise--cluster-store--cluster-store-opt 守護程式選項已移除。

支援舊版 ~/.dockercfg 配置檔案

在版本 v20.10 中棄用 在版本 v23.0 中移除

Docker CLI 直到 v1.7.0 都使用 ~/.dockercfg 檔案在登錄檔(docker login)進行身份驗證後儲存憑據。Docker v1.7.0 將此檔案替換為新的 CLI 配置檔案,位於 ~/.docker/config.json。在實現新配置檔案時,舊檔案(和檔案格式)作為回退保留,以幫助現有使用者遷移到新檔案。

鑑於舊檔案格式鼓勵不安全的憑據儲存(憑據未加密儲存),並且自 Docker v1.7.0 以來沒有任何版本的 CLI 建立過此檔案,因此已移除對此檔案及其格式的支援。

實驗性 CLI 功能的配置選項

在版本 v19.03 中棄用

在版本 v23.0 中移除

DOCKER_CLI_EXPERIMENTAL 環境變數和 CLI 配置檔案中相應的 experimental 欄位已棄用。實驗性功能預設啟用,這些配置選項不再起作用。

從 v23.0 開始,Docker CLI 不再在 docker version 的輸出中為客戶端列印 Experimental,並且該欄位已從 JSON 格式中移除。

CLI 外掛支援

在版本 v20.10 中棄用

CLI 外掛 API 現在已標記為棄用。

Dockerfile 舊版 ENV name value 語法

在版本 v20.10 中棄用

Dockerfile ENV 指令允許使用 ENV name=valueENV name value 設定值。後一種(ENV name value)形式可能含糊不清,例如,以下定義了一個名為 ONE 的單個環境變數,其值為 "TWO= THREE=world",但可能旨在設定三個環境變數

ENV ONE TWO= THREE=world

此格式也不允許在 Dockerfile 的單個 ENV 行中設定多個環境變數。

不鼓勵使用 ENV name value 語法,並可能在未來版本中移除。鼓勵使用者更新其 Dockerfile 以使用 ENV name=value 語法,例如

ENV ONE="" TWO="" THREE="world"

docker build --stream 標誌(實驗性)

在版本 v20.10 中棄用 在版本 v20.10 中移除

Docker v17.07 在 docker build 上引入了一個實驗性 --stream 標誌,允許增量地將構建上下文傳送到守護程式,而不是無條件地傳送整個構建上下文。

此功能已作為 BuildKit 的一部分重新實現,BuildKit 預設使用流式傳輸,並且在使用經典構建器時將忽略 --stream 選項,而是列印棄用警告。

鼓勵希望使用此功能的使用者透過設定 DOCKER_BUILDKIT=1 環境變數或透過守護程式或 CLI 配置檔案來啟用 BuildKit。

fluentd-async-connect 日誌選項

在版本 v20.10 中棄用 在版本 v28.0 中移除

fluentd 日誌驅動程式的 --log-opt fluentd-async-connect 選項已被 --log-opt fluentd-async 棄用。如果使用舊選項,則在守護程式日誌中記錄棄用訊息

fluent#New: AsyncConnect is now deprecated, use Async instead

建議使用者將來使用 fluentd-async 選項,因為舊選項的支援已移除。

使用映象清單 v2 schema 1 進行推送和拉取

在版本 v19.03 中棄用

在版本 v26.0 中預設停用

在版本 v28.2 中移除

映象清單 v2 schema 1 和“Docker Image v1”格式已被棄用,取而代之的是 v2 schema 2OCI 映象規範格式。

不應再使用這些舊版格式,建議使用者更新映象以使用當前格式,或升級到更新的映象。從 Docker v26.0 開始,預設停用拉取這些映象,並在 v28.2 中移除了支援。嘗試拉取舊版映象現在會產生錯誤

$ docker pull ubuntu:10.04
Error response from daemon:
Docker Image Format v1 and Docker Image manifest version 2, schema 1 support has been removed.
Suggest the author of docker.io/library/ubuntu:10.04 to upgrade the image to the OCI Format or Docker Image manifest v2, schema 2.
More information at https://docs.docker.net.tw/go/deprecated-image-specs/

docker engine 子命令

在版本 v19.03 中棄用

在版本 v20.10 中移除

docker engine activatedocker engine checkdocker engine update 提供了一種替代安裝方法,用於將 Docker Community 引擎升級到 Docker Enterprise,使用基於映象的 Docker Engine 分發。

此功能僅在 Linux 上可用,並且僅在本地節點上執行時可用。鑑於此功能的限制以及該功能未被廣泛採用,docker engine 子命令將被移除,取而代之的是透過標準包管理器進行安裝。

頂級 docker deploy 子命令(實驗性)

在版本 v19.03 中棄用

在版本 v20.10 中移除

頂級 docker deploy 命令(使用“Docker Application Bundle”(.dab) 檔案格式)作為實驗性功能在 Docker 1.13 / 17.03 中引入,但已被使用 docker stack deploy 子命令的 Docker Compose 檔案支援所取代。

使用“dab”檔案進行 docker stack deploy(實驗性)

在版本 v19.03 中棄用

在版本 v20.10 中移除

由於此功能沒有進行開發,並且沒有主動使用檔案格式,因此 DAB 檔案格式和頂級 docker deploy 命令(在 19.03 中預設隱藏)的支援將被移除,取而代之的是使用 compose 檔案的 docker stack deploy

支援 overlay2.override_kernel_check 儲存選項

在版本 v19.03 中棄用 在版本 v24.0 中移除

此守護程式配置選項停用了用於檢測核心是否支援帶有多個較低目錄的 OverlayFS 的 Linux 核心版本檢查,OverlayFS 是 overlay2 儲存驅動程式所必需的。從 Docker v19.03.7 開始,檢測得到了改進,不再依賴核心版本,因此此選項不再使用。

AuFS 儲存驅動

在版本 v19.03 中棄用 在版本 v24.0 中移除

aufs 儲存驅動已棄用,取而代之的是 overlay2,並在 Docker Engine v24.0 中移除。aufs 儲存驅動的使用者在升級到 Docker Engine v24.0 之前必須遷移到不同的儲存驅動,例如 overlay2

aufs 儲存驅動促進了 Docker 在不支援 OverlayFS 的發行版上執行,例如最初隨 3.14 核心釋出的 Ubuntu 14.04 LTS。

現在 Ubuntu 14.04 不再是 Docker 支援的發行版,並且所有支援的發行版都可使用 overlay2(因為它們要麼在核心 4.x 上,要麼具有多層目錄的後移植支援),沒有理由繼續維護 aufs 儲存驅動。

舊版 overlay 儲存驅動

在版本 v18.09 中棄用 在版本 v24.0 中移除

overlay 儲存驅動程式已棄用,取而代之的是 overlay2 儲存驅動程式,它具有 overlay 的所有優點,而沒有其限制(過多的 inode 消耗)。舊版 overlay 儲存驅動程式已在 Docker Engine v24.0 中移除。overlay 儲存驅動程式的使用者應在升級到 Docker Engine v24.0 之前遷移到 overlay2 儲存驅動程式。

舊版 overlay 儲存驅動程式允許在早於 v4.x 的核心上使用 overlayFS 支援的檔案系統。現在所有支援的發行版都能夠執行 overlay2(因為它們要麼在核心 4.x 上,要麼具有多層目錄的後移植支援),因此沒有理由繼續維護 overlay 儲存驅動程式。

Device mapper 儲存驅動

在版本 v18.09 中棄用 在版本 v23.0 中預設停用 在版本 v25.0 中移除

devicemapper 儲存驅動程式已棄用,取而代之的是 overlay2,並在 Docker Engine v25.0 中移除。devicemapper 儲存驅動程式的使用者必須在升級到 Docker Engine v25.0 之前遷移到不同的儲存驅動程式,例如 overlay2

devicemapper 儲存驅動程式促進了 Docker 在不支援其他儲存驅動程式(如 overlay2 或 btrfs)的舊(3.x)核心上執行。

現在所有受支援的發行版都已新增對 overlay2 的支援(因為它們要麼在核心 4.x 上,要麼具有多層目錄的後移植支援),因此沒有理由繼續維護 devicemapper 儲存驅動程式。

在引擎標籤中使用保留名稱空間

在版本 v18.06 中棄用

在版本 v20.10 中移除

引擎標籤中 com.docker.*io.docker.*org.dockerproject.* 名稱空間一直被記錄為保留,但從未強制執行。

現在,使用這些名稱空間將在引擎日誌中導致警告,以勸阻其使用,並在 v20.10 及更高版本中報錯。

--disable-legacy-registry 覆蓋守護程式選項

在版本 v17.12 中停用

在版本 v19.03 中移除

--disable-legacy-registry 標誌在 Docker 17.12 中已停用,使用時將列印錯誤。為了列印此錯誤,該標誌本身仍然存在,但已隱藏。該標誌已在 Docker 19.03 中移除。

與 V1 登錄檔互動

在版本 v17.06 中預設停用

在版本 v17.12 中移除

版本 1.8.3 添加了一個標誌 (--disable-legacy-registry=false),該標誌阻止 Docker 守護程式對 v1 登錄檔執行 pullpushlogin 操作。儘管預設啟用,但這表示棄用 v1 協議的意圖。

對公共登錄檔的 v1 協議支援在 1.13 中移除。任何使用 v1 的映象配置都應更新為使用 v2 登錄檔映象

從 Docker 17.12 開始,對 V1 登錄檔的支援已移除,--disable-legacy-registry 標誌不能再使用,如果設定,dockerd 將無法啟動。

預設情況下 service createservice update 非同步執行

在版本 v17.05 中棄用

在版本 v17.10 中預設停用

Docker 17.05 添加了一個可選的 --detach=false 選項,使 docker service createdocker service update 同步工作。此選項將在 Docker 17.10 中預設啟用,屆時可以使用 --detach 標誌來使用以前的(非同步)行為。

此選項的預設值也將在 Docker 17.10 中相應地更改為 docker service rollbackdocker service scale

dockerd 上的 -g--graph 標誌

在版本 v17.05 中棄用

在版本 v23.0 中移除

dockerddocker daemon 命令的 -g--graph 標誌用於指示儲存持久資料和資源配置的目錄,並已被更具描述性的 --data-root 標誌取代。這些標誌在 v17.05 中已棄用並隱藏,並在 v23.0 中移除。

NetworkSettings 中的頂級網路屬性

在版本 v1.13.0 中棄用

計劃在版本 v17.12 中移除

檢查容器時,NetworkSettings 包含有關預設(“bridge”)網路的頂級資訊;

EndpointIDGatewayGlobalIPv6AddressGlobalIPv6PrefixLenIPAddressIPPrefixLenIPv6GatewayMacAddress

這些屬性已棄用,取而代之的是 NetworkSettings.Networks 中的每個網路屬性。這些屬性在 Docker 1.9 中已被“棄用”,但為了向後相容性而保留。

有關詳細資訊,請參閱 #17538

/images/json 端點的 filter 選項

在版本 v1.13.0 中棄用

在版本 v20.10 中移除

過濾映象列表的 filter 選項(按名稱或名稱:標籤)現在已實現為常規過濾器,名為 reference

repository:shortid 映象引用

在版本 v1.13.0 中棄用

在版本 v17.12 中移除

用於引用映象的 repository:shortid 語法使用很少,與標籤引用衝突,並且可能與摘要引用混淆。

repository:shortid 符號引用映象的支援已在 Docker 17.12 中移除。

docker daemon 子命令

在版本 v1.13.0 中棄用

在版本 v17.12 中移除

守護程式已移至單獨的二進位制檔案 (dockerd),應改為使用此檔案。

引擎標籤中具有衝突值的重複鍵

在版本 v1.13.0 中棄用

在版本 v17.12 中移除

當設定具有衝突值的重複鍵時,將產生錯誤,並且守護程式將無法啟動。

Dockerfile 中的 MAINTAINER

在版本 v1.13.0 中棄用

MAINTAINERLABEL 的早期非常有限的形式,應改為使用 LABEL

沒有版本的 API 呼叫

在版本 v1.13.0 中棄用

計劃在版本 v17.12 中移除

所有 API 呼叫都應提供 API 版本,以確保與未來 Engine 版本的相容性。現在,您必須請求 /v1.25/containers/json,而不是隻請求 URL /containers/json

沒有 d_type 支援的 overlay/overlay2 後備檔案系統

在版本 v1.13.0 中棄用

在版本 v17.12 中移除

如果後備檔案系統不支援 d_type,則 overlay 和 overlay2 儲存驅動程式將無法正常工作。例如,如果 XFS 使用 ftype=0 選項格式化,則不支援 d_type

對這些設定的支援已移除,並且 Docker v23.0 及更高版本現在在嘗試在沒有 d_type 支援的後備檔案系統上使用 overlay2overlay 儲存驅動程式時無法啟動。

有關詳細資訊,請參閱 #27358

在版本 v1.12.0 中棄用

在版本 v20.10 中移除

docker search --automateddocker search --stars 選項已棄用。請改用 docker search --filter=is-automated=<true|false>docker search --filter=stars=...

--help 的簡寫 -h

在版本 v1.12.0 中棄用

計劃在版本 v17.09 中移除

簡寫 (-h) 在 Linux 上不如 --help 常見,並且不能在所有子命令上使用(因為它與例如 docker create 上的 -h / --hostname 衝突)。因此,-h 簡寫未在子命令的“用法”輸出中列印,也未在文件中說明,現在已標記為“已棄用”。

docker login 上的 -e--email 標誌

在版本 v1.11.0 中棄用

在版本 v17.06 中移除

如果給定的使用者名稱不存在,docker login 不再自動在目標註冊表中註冊帳戶。由於此更改,電子郵件標誌不再是必需的,並將被棄用。

docker run--security-opt 標誌的分隔符(:

在版本 v1.11.0 中棄用

計劃在版本 v17.06 中移除

--security-opt 標誌不再使用冒號分隔符 (:) 來分隔鍵和值,它使用等號 (=) 以與其他類似標誌(如 --storage-opt)保持一致。

API 中模糊的事件欄位

在版本 v1.10.0 中棄用

事件 API 中的 IDStatusFrom 欄位已棄用,取而代之的是更豐富的結構。有關新格式,請參閱事件 API 文件。

docker tag 上的 -f 標誌

在版本 v1.10.0 中棄用

在版本 v1.12.0 中移除

為了使標記在各種 docker 命令中保持一致,docker tag 命令上的 -f 標誌已棄用。不再需要指定 -f 來將標籤從一個映象移動到另一個映象。如果缺少 -f 標誌且指定的標籤已在使用,docker 也不會生成錯誤。

API 容器啟動時的 HostConfig

在版本 v1.10.0 中棄用

在版本 v1.12.0 中移除

HostConfig 傳遞給 POST /containers/{name}/start 已棄用,取而代之的是在容器建立時定義它(POST /containers/create)。

docker ps 上的 --before--since 標誌

在版本 v1.10.0 中棄用

在版本 v1.12.0 中移除

docker ps --beforedocker ps --since 選項已棄用。請改用 docker ps --filter=before=...docker ps --filter=since=...

驅動程式特定的日誌標籤

在版本 v1.9.0 中棄用

在版本 v1.12.0 中移除

日誌標籤現在以跨不同日誌驅動程式的標準方式生成。因此,驅動程式特定的日誌標籤選項 syslog-taggelf-tagfluentd-tag 已棄用,取而代之的是通用 tag 選項。

$ docker --log-driver=syslog --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"

Docker Content Trust ENV 密碼變數名稱更改

在版本 v1.9.0 中棄用

在版本 v1.12.0 中移除

自 1.9 版起,Docker Content Trust 離線金鑰已重新命名為根金鑰,標記金鑰已重新命名為倉庫金鑰。由於此重新命名,我們還更改了相應的環境變數

  • DOCKER_CONTENT_TRUST_OFFLINE_PASSPHRASE 現在命名為 DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE
  • DOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE 現在命名為 DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE

/containers/(id or name)/copy 端點

在版本 v1.8.0 中棄用

在版本 v1.12.0 中移除

端點 /containers/(id or name)/copy 已棄用,取而代之的是 /containers/(id or name)/archive

LXC 內建 exec 驅動

在版本 v1.8.0 中棄用

在版本 v1.10.0 中移除

內建 LXC 執行驅動、lxc-conf 標誌和 API 欄位已移除。

舊的命令列選項

在版本 v1.8.0 中棄用

在版本 v1.10.0 中移除

-d--daemon 標誌已棄用。請改用單獨的 dockerd 二進位制檔案。

以下某些命令列選項的單破折號 (-opt) 變體已棄用,並替換為雙破折號選項 (--opt)

  • docker attach -nostdin
  • docker attach -sig-proxy
  • docker build -no-cache
  • docker build -rm
  • docker commit -author
  • docker commit -run
  • docker events -since
  • docker history -notrunc
  • docker images -notrunc
  • docker inspect -format
  • docker ps -beforeId
  • docker ps -notrunc
  • docker ps -sinceId
  • docker rm -link
  • docker run -cidfile
  • docker run -dns
  • docker run -entrypoint
  • docker run -expose
  • docker run -link
  • docker run -lxc-conf
  • docker run -n
  • docker run -privileged
  • docker run -volumes-from
  • docker search -notrunc
  • docker search -stars
  • docker search -t
  • docker search -trusted
  • docker tag -force

以下雙破折號選項已棄用,沒有替代選項

  • docker run --cpuset
  • docker run --networking
  • docker ps --since-id
  • docker ps --before-id
  • docker search --trusted

在版本 v1.5.0 中棄用

在版本 v1.12.0 中移除

單破折號 (-help) 已移除,取而代之的是雙破折號 --help

dockerd 上的 --api-enable-cors 標誌

在版本 v1.6.0 中棄用

在版本 v17.09 中移除

--api-enable-cors 標誌自 v1.6.0 起已棄用。請改用 --api-cors-header 標誌。

docker commit 上的 --run 標誌

在版本 v0.10.0 中棄用

在版本 v1.13.0 中移除

docker commit 命令的 --run 標誌(及其簡寫 -run)已棄用,取而代之的是允許傳遞 Dockerfile 命令的 --changes 標誌。

docker import 中的三個引數形式

在版本 v0.6.7 中棄用

在版本 v1.12.0 中移除

docker import 命令格式 file|URL|- [REPOSITORY [TAG]] 自 2013 年 11 月以來已棄用。它不再受支援。