目录

已弃用的引擎功能

此页面概述了引擎中已弃用的功能。不包括打包和支持的 (Linux) 发行版的更改。要了解 Linux 发行版支持的结束时间,请参阅 发行说明.

功能弃用策略

随着 Docker 的更改,可能存在需要移除现有功能或将其替换为更新的功能的情况。在移除现有功能之前,它将在文档中标记为“已弃用”,并在 Docker 中保留至少一个稳定版本,除非另有明确说明。在此时间之后,它可能会被移除。

预期用户会注意每个版本的已弃用功能列表,并尽快规划他们从这些功能迁移出去,以及(如果适用)向替换功能迁移。

已弃用的引擎功能

下表概述了已弃用功能的当前状态

  • 已弃用:此功能标记为“已弃用”,不应再使用。此功能可能会在将来的版本中被移除、禁用或更改行为。“已弃用”列包含此功能被标记为已弃用的版本,而“移除”列包含此功能将被移除的暂定版本。如果“移除”列中没有包含版本,则表示尚未确定此版本。
  • 已移除:此功能已被移除、禁用或隐藏。有关详细信息,请参阅链接部分。某些功能被“软”弃用,这意味着它们仍然出于向后兼容性目的而起作用,并允许用户迁移到替代方案。在这种情况下,可能会打印警告,用户不应依赖此功能。
状态功能已弃用移除
已弃用镜像检查中的非标准字段v27.0v28.0
已弃用API CORS 标头v27.0v28.0
已弃用Graphdriver 插件(实验性)v27.0v28.0
已弃用未经身份验证的 TCP 连接v26.0v28.0
已弃用ContainerContainerConfig 字段在镜像检查中v25.0v26.0
已弃用弃用旧版 API 版本v25.0v26.0
已移除网络别名字段中的容器短 IDv25.0v26.0
已弃用IsAutomated 字段和 docker search 上的“is-automated”过滤器v25.0v26.0
已移除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.10-
已移除Windows 上的 Linux 容器 (LCOW)v20.10v23.0
已弃用使用 cgroups v1 的 BLKIO 权重选项v20.10-
已移除内核内存限制v20.10v23.0
已移除使用外部键值存储的传统 Swarm 和覆盖网络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.10-
已移除实验性 CLI 功能的配置选项v19.03v23.0
已弃用使用镜像清单 v2 模式 1 推送和拉取v19.03v27.0
已移除docker engine 子命令v19.03v20.10
已移除顶级 docker deploy 子命令(实验性)v19.03v20.10
已移除使用“dab”文件(实验性)的 docker stack deployv19.03v20.10
已移除overlay2.override_kernel_check 存储选项的支持v19.03v24.0
已移除AuFS 存储驱动程序v19.03v24.0
已移除旧版“覆盖”存储驱动程序v18.09v24.0
已移除设备映射器存储驱动程序v18.09v25.0
已移除在引擎标签中使用保留的命名空间v18.06v20.10
已移除--disable-legacy-registry 覆盖守护程序选项v17.12v19.03
已移除与 V1 注册表交互v17.06v17.12
已移除异步 service createservice update 作为默认值v17.05v17.10
已移除-g--graph 标志在 dockerdv17.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 支持的覆盖/overlay2 的支持文件系统v1.13v17.12
已移除docker search 上的 --automated--stars 标志v1.12v20.10
已弃用-h--help 的简写v1.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 内容信任 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

镜像检查中的非标准字段

在版本 v27.0 中已弃用 在版本 v28.0 中目标移除

docker image inspect(以及由 GET /images/{name}/json API 终结点返回)中显示的 Config 字段返回了额外的字段,这些字段不是镜像配置的一部分,也不属于 Docker 镜像规范 和 [OCI 镜像规范]。

这些字段从不设置(并且始终返回类型的默认值),但在留空时不会从响应中省略。由于这些字段并非旨在成为镜像配置响应的一部分,因此它们已弃用,并将从下一个版本中的 API 中移除。

以下字段目前包含在 API 响应中,但不是基础镜像的 Config 的一部分,并且已弃用

  • 主机名
  • 域名
  • AttachStdin
  • AttachStdout
  • AttachStderr
  • Tty
  • OpenStdin
  • StdinOnce
  • 镜像
  • NetworkDisabled(除非设置,否则已省略)
  • MacAddress(除非设置,否则已省略)
  • StopTimeout(除非设置,否则已省略)

Graphdriver 插件(实验性)

在版本 v27.0 中已弃用 在版本 v27.0 中默认禁用 在版本 v28.0 中目标移除

Graphdriver 插件 是一个实验性功能,允许使用自定义存储驱动程序来扩展 Docker 引擎,以存储镜像和容器。此功能自创建以来一直未维护,并且将在即将发布的版本中不再受支持。

对 graphdriver 插件的支持在 v27.0 中默认禁用,并在 v28.0 中移除。在 v27.0 中提供了一个 DOCKERD_DEPRECATED_GRAPHDRIVER_PLUGINS 环境变量来重新启用此功能。此环境变量必须在守护程序的环境中设置为非空值。

DOCKERD_DEPRECATED_GRAPHDRIVER_PLUGINS 环境变量以及对 graphdriver 插件的支持将在 v28.0 中移除。建议使用此功能的用户将 Docker 引擎配置为使用 containerd 镜像存储 以及自定义 snapshotter

API CORS 标头

在版本 v27.0 中已弃用 在版本 v28.0 中目标移除

Docker 守护进程的 api-cors-header 配置选项是不安全的,因此已弃用并计划在将来移除。错误设置此选项可能会为未经身份验证的跨域请求提供机会,使其被守护进程接受。

从 Docker 引擎 v27.0 开始,此标志仍然可以设置,但除非环境变量 DOCKERD_DEPRECATED_CORS_HEADER 也设置为非空值,否则它不会生效。

此标志将在 v28.0 中完全移除。

这对依赖此选项从浏览器访问 Docker API 的授权插件和其他程序来说是一个重大变更。如果您需要通过浏览器访问 API,请使用反向代理。

未经身份验证的 TCP 连接

弃用版本:v26.0 计划移除版本:v28.0

将 Docker 守护进程配置为监听 TCP 地址将需要强制 TLS 验证。此变更旨在通过阻止对 Docker 守护进程在可能不安全的网络上的未经授权的访问来确保安全通信。此强制 TLS 要求适用于除 tcp://localhost 之外的所有 TCP 地址。

在版本 27.0 及更高版本中,如果守护进程也配置为通过 TCP 接受远程连接,则指定 --tls=false--tlsverify=false CLI 标志会导致守护进程无法启动。这也适用于 daemon.json 中的等效配置选项。

为了便于通过 TCP 远程访问 Docker 守护进程,您需要实现 TLS 验证。这可以通过加密传输中的数据和提供相互身份验证机制来保护连接。

对于不需要远程守护进程访问的环境,我们建议将 Docker 守护进程绑定到 Unix 套接字。对于需要远程访问且无法使用 TLS 加密的守护进程,您可能需要考虑使用 SSH 作为替代解决方案。

有关配置 Docker 守护进程的 TLS(或 SSH)的更多信息、帮助和分步说明,请参阅 保护 Docker 守护进程套接字

ContainerContainerConfig 字段在镜像检查中

弃用版本:v25.0 计划移除版本:v26.0

docker inspect 返回的 ContainerContainerConfig 字段主要是经典(非 BuildKit)镜像构建器的实现细节。这些字段不可移植,并且在使用基于 BuildKit 的构建器(从 v23.0 开始默认启用)时为空。这些字段在 v25.0 中已弃用,并将在 v26.0 开始被省略。如果需要镜像的配置,您可以从 Config 字段获取。

弃用旧版 API 版本

弃用版本:v25.0 计划移除版本:v26.0

Docker 守护进程提供了一个版本化的 API,用于向后兼容旧客户端。Docker 客户端可以执行 API 版本协商来选择守护进程支持的最新 API 版本(在必要时降级到较旧的 API 版本)。API 版本协商是在 Docker v1.12.0(API 1.24)中引入的,在此之前的客户端使用固定 API 版本。

Docker 引擎版本(包括 v25.0)支持所有 API 版本 在给定平台的稳定版本中包含。对于 Linux 上的 Docker 守护进程,最早支持的 API 版本是 1.12(对应 Docker 引擎 v1.0.0),而对于 Windows 上的 Docker 守护进程,最早支持的 API 版本是 1.24(对应 Docker 引擎 v1.12.0)。

对旧 API 版本的支持(在当前版本的 Docker 引擎上提供旧 API 版本)主要目的是为了提供与最近但仍在支持的客户端版本的兼容性,这是一个常见的场景(Docker 守护进程可能已更新到最新版本,但并非所有客户端都可能更新,反之亦然)。对之前的 API 版本的支持(由 EOL 版本的 Docker 守护进程提供的 API 版本)是在“尽力而为”的基础上提供的。

使用旧 API 版本的情况非常少见,并且对旧 API 版本的支持涉及相当大的复杂性(Docker 1.0.0 已经发布了 10 年)。因此,我们将开始弃用对旧 API 版本的支持。

Docker 引擎 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

引入了环境变量(DOCKER_MIN_API_VERSION),允许在守护进程中重新启用旧 API 版本。此环境变量必须在守护进程的环境中设置(例如,通过 systemd 覆盖文件),并且指定的 API 版本必须受守护进程支持(在 Linux 上为 1.12 或更高版本,或在 Windows 上为 1.24 或更高版本)。

对低于 1.24 的 API 版本的支持将在 Docker 引擎 v26 中永久移除,并且最低支持的 API 版本将在后续版本中逐渐提高。

我们不建议依赖 DOCKER_MIN_API_VERSION 环境变量,除非在无法更新旧客户端并且必须支持这些客户端的特殊情况下。

网络别名字段中的容器短 ID

弃用版本:v25.0 移除版本:v26.0

docker inspect 返回的 Aliases 字段在容器启动后包含容器短 ID。此行为在 v25.0 中已弃用,但保留到下一个版本 v26.0。从该版本开始,Aliases 字段将仅包含通过 docker container createdocker run 标志 --network-alias 设置的别名。

一个新的字段 DNSNames 已在 v25.0 中引入,它包含容器名称(如果指定)、主机名、网络别名以及容器短 ID,应使用它来代替 Aliases 字段。

弃用版本:v25.0 计划移除版本:v26.0

Docker Hub 的搜索 API 已弃用“is_automated”字段。因此,在将来,镜像搜索中的 IsAutomated 字段将始终设置为 false,并且搜索“is-automated=true”将不会产生任何结果。

AUTOMATED 列已从 v25.0 中的默认 docker searchdocker image search 输出中移除,并且相应的 IsAutomated 模板选项将在 v26.0 中移除。

Logentries 日志驱动程序

弃用版本:v24.0 移除版本:v25.0

logentries 服务 SaaS 于 2022 年 11 月 15 日关闭,使此日志记录驱动程序无法正常工作。用户应不再使用此日志记录驱动程序,并且该驱动程序已在 Docker 25.0 中移除。在升级后,使用此日志记录驱动程序的现有容器将迁移到使用“local”日志记录驱动程序。

守护程序的 OOM-score 调整

弃用版本:v24.0 移除版本:v25.0

oom-score-adjust 选项是为了防止守护进程在其他进程之前被 OOM 杀死而添加的。此选项主要作为一种便利添加,因为将守护进程作为 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 的问题,我们建议您在 GitHub 上的 BuildKit 问题跟踪器{: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.dockerd.com.cn/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.dockerd.com.cn/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

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.

添加回退机制是为了允许用户将其镜像迁移到符合规范的注册表,或者使这些注册表符合规范。

请注意,此回退仅解决 docker pull 上的失败问题。其他命令(例如 docker stack deploy 或使用 containerd 拉取镜像)将继续失败。

鉴于这些注册表上的其他功能仍然无法正常工作,我们认为此回退是临时解决方案,并且将在将来的主要版本中移除此回退。

Windows 上的 Linux 容器 (LCOW)(实验性)

在以下版本中弃用:v20.10 在以下版本中移除:v23.0

在 Docker 17.09 中,作为技术预览,引入了在 Windows 上运行 Linux 容器(LCOW)的实验性功能。尽管在引入之后进行了许多改进,但该功能从未达到完整状态,并且开发现已停止,转而支持在 WSL2 中本机运行 Docker。

希望在 Windows 主机上运行 Linux 工作负载的开发者建议使用 Docker Desktop with WSL2 代替。

使用 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)标记为 "不推荐",OCI 运行时(如 runc)不再支持此选项。

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 和覆盖网络

在以下版本中弃用:v20.10 在以下版本中移除:v23.0

独立(“经典”)Swarm 已经弃用,以及使用外部键值存储的叠加网络。相应的 --cluster-advertise--cluster-store--cluster-store-opt 守护程序选项已被移除。

对旧版 ~/.dockercfg 配置文件支持

在以下版本中弃用:v20.10 在以下版本中移除:v23.0

直到 v1.7.0 的 docker CLI 使用 ~/.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 引入了一个实验性的 --stream 标志,用于 docker build,它允许将构建上下文增量发送到守护程序,而不是无条件地发送整个构建上下文。

此功能已作为 BuildKit 的一部分重新实现,BuildKit 默认使用流,并且当使用经典构建器时,--stream 选项将被忽略,而是打印弃用警告。

希望使用此功能的用户可以通过设置 DOCKER_BUILDKIT=1 环境变量,或通过守护程序或 CLI 配置文件来启用 BuildKit。

fluentd-async-connect 日志选项

在以下版本中弃用:v20.10

fluentd 日志记录驱动程序的 --log-opt fluentd-async-connect 选项已被 弃用,取而代之的是 --log-opt fluentd-async。如果使用旧选项,守护程序日志中会记录一条弃用消息。

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

鼓励用户从现在开始使用 fluentd-async 选项,因为对旧选项的支持将在未来版本中被移除。

使用镜像清单 v2 模式 1 推送和拉取

在以下版本中被弃用:v19.03

在以下版本中默认禁用:v26.0

在以下版本中目标为移除:v27.0

图像清单 v2 架构 1 和“Docker Image v1”格式已被弃用,取而代之的是 v2 架构 2OCI 图像规范 格式。

这些旧格式不再应该使用,建议用户更新图像以使用当前格式,或升级到更新的图像。从 Docker v26.0 开始,默认情况下会禁用拉取这些图像,并且在尝试拉取图像时会产生错误。

$ docker pull ubuntu:10.04
Error response from daemon:
[DEPRECATION NOTICE] Docker Image Format v1 and Docker Image manifest version 2, schema 1 support is disabled by default and will be removed in an upcoming release.
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.dockerd.com.cn/go/deprecated-image-specs/

Docker v26.0 中添加了一个环境变量(DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE),它允许在守护程序中重新启用对这些图像格式的支持。此环境变量必须在守护程序的环境中设置为非空值(例如,通过 systemd 覆盖文件)。对 DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE 环境变量的支持将在 Docker v27.0 中被移除,此后该功能将永久移除。

docker engine 子命令

在以下版本中被弃用:v19.03

在以下版本中被移除:v20.10

docker engine activatedocker engine checkdocker engine update 提供了一种替代安装方法,用于使用基于图像的 Docker 引擎分发版来升级 Docker Community 引擎到 Docker Enterprise。

此功能仅在 Linux 上可用,并且仅在本地节点上执行时可用。鉴于此功能的局限性,并且此功能没有得到广泛采用,docker engine 子命令将被移除,转而通过标准包管理器进行安装。

顶级 docker deploy 子命令(实验性)

在以下版本中被弃用:v19.03

在以下版本中被移除:v20.10

顶层 docker deploy 命令(使用“Docker 应用程序包”(.dab) 文件格式)在 Docker 1.13 / 17.03 中作为实验性功能引入,但后来被使用 docker stack deploy 子命令支持的 Docker Compose 文件取代。

使用“dab”文件(实验性)的 docker stack deploy

在以下版本中被弃用:v19.03

在以下版本中被移除:v20.10

由于该功能没有进行开发,并且文件格式没有被积极使用,因此将删除对 DAB 文件格式和顶级 docker deploy 命令(默认情况下在 19.03 中隐藏)的支持,转而使用 `docker stack deploy` 命令,并使用 compose 文件。

overlay2.override_kernel_check 存储选项的支持

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

此守护进程配置选项禁用了 Linux 内核版本检查,该检查用于检测内核是否支持具有多个下层目录的 OverlayFS,这是 overlay2 存储驱动程序所必需的。从 Docker v19.03.7 开始,检测得到了改进,不再依赖于内核版本,因此不再使用此选项。

AuFS 存储驱动程序

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

aufs 存储驱动程序已弃用,取而代之的是 `overlay2`,并且已在 Docker Engine v24.0 中移除。aufs 存储驱动程序的用户必须迁移到其他存储驱动程序(例如 `overlay2`),然后再升级到 Docker Engine v24.0。

aufs 存储驱动程序可以使 Docker 在不支持 OverlayFS 的发行版上运行,例如 Ubuntu 14.04 LTS,它最初附带的是 3.14 内核。

现在,Ubuntu 14.04 不再是 Docker 支持的发行版,并且 `overlay2` 可用于所有支持的发行版(因为它们都在内核 4.x 上,或者已经反向移植了对多个下层目录的支持),因此没有理由继续维护 aufs 存储驱动程序。

旧版覆盖存储驱动程序

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

overlay 存储驱动程序已弃用,取而代之的是 `overlay2` 存储驱动程序,它具有 `overlay` 的所有优点,但没有其局限性(过度使用 inode)。旧版 `overlay` 存储驱动程序已在 Docker Engine v24.0 中移除。overlay 存储驱动程序的用户应该在升级到 Docker Engine v24.0 之前迁移到 `overlay2` 存储驱动程序。

旧版 `overlay` 存储驱动程序允许在 4.x 之前的内核上使用 OverlayFS 支持的文件系统。现在所有支持的发行版都可以运行 `overlay2`(因为它们都在内核 4.x 上,或者已经反向移植了对多个下层目录的支持),因此没有理由继续维护 `overlay` 存储驱动程序。

设备映射器存储驱动程序

在版本:v18.09 中弃用 在版本:v23.0 中默认禁用 在版本:v25.0 中移除

devicemapper 存储驱动程序已弃用,取而代之的是 `overlay2`,并且已在 Docker Engine v25.0 中移除。devicemapper 存储驱动程序的用户必须迁移到其他存储驱动程序(例如 `overlay2`),然后再升级到 Docker Engine v25.0。

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 的此选项的默认值也将相应更改。

-g--graph 标志在 dockerd

在版本: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 版本,以确保与未来引擎版本的兼容性。您现在必须请求 /v1.25/containers/json,而不是只请求例如 URL /containers/json

没有 d_type 支持的覆盖/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=...

-h--help 的简写

在版本:v1.12.0 中弃用

在版本:v17.09 中的目标是移除

简写 (-h) 不如 Linux 上的 --help 常见,并且不能在所有子命令上使用(因为它与 docker create 上的 -h / --hostname 冲突)。因此,-h 简写不在子命令的“用法”输出中打印,也没有记录,现在被标记为“弃用”。

docker login 上的 -e--email 标志

在版本:v1.11.0 中弃用

已于以下版本中移除: v17.06

docker login 命令将不再支持在目标注册表中自动注册帐户,即使给定的用户名不存在。由于此更改,email 标志不再需要,并将被弃用。

docker run--security-opt 标志的分隔符 (:)

在版本:v1.11.0 中弃用

将在以下版本中移除: v17.06

--security-opt 标志不再使用冒号分隔符 (:) 来分隔键值对,而是使用等号 (=),以与其他类似标志 (如 --storage-opt) 保持一致。

API 中的不明确事件字段

已于以下版本中弃用: v1.10.0

events API 中的 IDStatusFrom 字段已被弃用,取而代之的是更丰富的结构。有关新格式,请参阅 events 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 内容信任 ENV 密码短语变量名称更改

已于以下版本中弃用: v1.9.0

已于以下版本中移除: v1.12.0

从 1.9 开始,Docker 内容信任脱机密钥已重命名为根密钥,标记密钥已重命名为存储库密钥。由于此重命名,我们还会更改相应的环境变量

  • 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 标志已被弃用,取而代之的是 daemon 子命令

docker daemon -H ...

以下某些命令行选项的单破折号 (-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

docker -help
docker [COMMAND] -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) 已被弃用,取而代之的是 --changes 标志,该标志允许传递 Dockerfile 命令。

docker import 中的三参数形式

已于以下版本中弃用: v0.6.7

已于以下版本中移除: v1.12.0

docker import 命令格式 file|URL|- [REPOSITORY [TAG]] 自 2013 年 11 月起已弃用。不再受支持。