已弃用的 Docker Engine 特性

目录

本页概述了 Engine 中已弃用的特性。不包括打包和支持的 (Linux) 发行版更改。要了解 Linux 发行版的停止支持信息,请参阅发布说明

特性弃用策略

随着 Docker 的变化,有时需要移除现有特性或用更新的特性替换它们。在现有特性被移除之前,它在文档中会被标记为“已弃用”,并且除非明确指定,否则会保留在 Docker 中至少一个稳定版本。之后可能会被移除。

用户应注意每个版本中已弃用的特性列表,并尽快计划从这些特性迁移出来,并在(如果适用)向替代特性迁移。

已弃用的 engine 特性

下表概述了已弃用特性的当前状态

  • 已弃用:特性被标记为“已弃用”,不应再使用。

    该特性可能会在未来版本中被移除、禁用或改变行为。“已弃用”列包含该特性被标记为已弃用的版本,而“移除”列包含计划移除该特性的暂定版本。如果在“移除”列中没有包含版本,则移除版本待定。

  • 已移除:特性已被移除、禁用或隐藏。

    详情请参阅链接部分。有些特性是“软”弃用,这意味着它们为了向后兼容性仍然可用,并允许用户迁移到替代方案。在这种情况下,可能会打印警告,并且用户不应依赖此特性。

状态特性已弃用移除
已弃用推送不可分发制品配置v28.0v29.0
已弃用docker stopdocker restart 上的 --time 选项v28.0-
已弃用image inspect 中的非标准字段v27.0v28.0
已移除API CORS 头v27.0v28.0
已弃用Graphdriver 插件 (实验性)v27.0v28.0
已弃用未认证的 TCP 连接v26.0v28.0
已弃用Image inspect 中的 ContainerContainerConfig 字段v25.0v26.0
已弃用弃用旧版 API 版本v25.0v26.0
已移除network Aliases 字段中的容器短 IDv25.0v26.0
已弃用IsAutomated 字段和 docker search 上的 is-automated 过滤器v25.0v26.0
已移除logentries 日志驱动v24.0v25.0
已移除daemon 的 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 和 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
已弃用使用镜像 manifest v2 schema 1 推送和拉取v19.03v27.0
已移除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
已移除engine 标签中保留命名空间的使用v18.06v20.10
已移除--disable-legacy-registry 覆盖 daemon 选项v17.12v19.03
已移除与 V1 仓库交互v17.06v17.12
已移除默认异步 service createservice updatev17.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
已移除engine 标签中具有冲突值的重复键v1.13v17.12
已弃用Dockerfile 中的 MAINTAINERv1.13-
已弃用没有版本号的 API 调用v1.13v17.12
已移除overlay/overlay2 不支持 d_type 的后端文件系统v1.13v17.12
已移除docker search 上的 --automated--stars 标志v1.12v20.10
已弃用--help-h 简写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 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

推送不可分发制品配置

在 v28.0 版本中已弃用 计划在 v29.0 版本中移除

非可分发制品(也称为外部层)在 Docker v1.12 中引入,用于适应 Windows 镜像,因为其 EULA 不允许通过 Microsoft 托管以外的仓库分发层。OCI 分发规范在 oci#233 中采用了外部/非可分发层的概念。后来放宽了这些限制,允许通过非公共仓库分发这些镜像,并在 Docker v17.0.6.0 中添加了相关配置。

2022 年,Microsoft 更新了 EULA 并移除了这些限制,随后 OCI 分发规范在 oci#965 中弃用了外部层。2023 年,Microsoft 移除了其镜像中外部数据层的使用,使得此功能过时。

Docker v28.0 弃用了 --allow-nondistributable-artifacts daemon 标志和 daemon.json 中对应的 allow-nondistributable-artifacts 字段。设置任一选项不再生效,但会添加弃用警告日志以提高对此弃用的认识。此警告计划在 Docker v29.0 中变为错误。

因此,建议目前使用这些选项的用户从其配置中移除此选项,以防止在升级到 Docker v29.0 时 daemon 启动失败。

GET /info API 响应的 RegistryConfig 中的 AllowNondistributableArtifactsCIDRsAllowNondistributableArtifactsHostnames 字段也已弃用。对于 API 版本 v1.48 及更低版本,这些字段仍包含在响应中,但始终为 null。在 API 版本 v1.49 及更高版本中,这些字段将被完全省略。

docker stopdocker restart 上的 --time 选项

在 v28.0 版本中已弃用

docker stopdocker container stopdocker restartdocker container restart 命令的 --time 选项已重命名为 --timeout,以与其他超时选项保持一致。--time 选项现已弃用并隐藏,但为了向后兼容性仍然可用。建议用户改用 --timeout 选项。

image inspect 中的非标准字段

在 v27.0 版本中已弃用 计划在 v28.0 版本中移除

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

这些字段从未被设置(并且总是返回该类型的默认值),但在响应中即使为空也不会被省略。由于这些字段原本不打算成为镜像配置响应的一部分,它们已被弃用,并将在下个版本中从 API 中移除。

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

  • Hostname (主机名)
  • Domainname (域名)
  • AttachStdin (附加标准输入)
  • AttachStdout (附加标准输出)
  • AttachStderr (附加标准错误)
  • Tty (TTY)
  • OpenStdin (打开标准输入)
  • StdinOnce (标准输入一次)
  • Image (镜像)
  • NetworkDisabled (除非设置,否则已省略)
  • MacAddress (除非设置,否则已省略)
  • StopTimeout (除非设置,否则已省略)

Graphdriver 插件 (实验性)

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

Graphdriver 插件 是一项实验性功能,允许通过自定义存储驱动程序扩展 Docker Engine,以存储镜像和容器。此功能自诞生以来一直未得到维护,并且在即将发布的版本中将不再支持。

从 v27.0 版本开始,graphdriver 插件的支持默认禁用,并将在 v28.0 版本中移除。在 v27.0 中提供了 DOCKERD_DEPRECATED_GRAPHDRIVER_PLUGINS 环境变量以重新启用此功能。此环境变量必须在守护进程的环境中设置为非空值。

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

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://localhost 除外。

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

为了促进通过 TCP 对 Docker 守护进程的远程访问,你需要实现 TLS 验证。这通过加密传输中的数据并提供相互认证机制来保护连接。

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

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

Image inspect 中的 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 Engine v25.0 及更高版本支持给定平台上稳定版本中包含的所有 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 版本(EOL 版本的 Docker Daemon 提供的 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

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

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

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

network 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 中弃用 目标移除版本: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”日志驱动程序。

daemon 的 OOM-score 调整

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

添加 oom-score-adjust 选项是为了防止守护进程在其他进程之前被 OOM-killed。此选项主要作为一种便利措施添加,因为将守护进程作为 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 镜像的经典(“legacy”)构建器弃用周期的开始。经典构建器上不会有积极的开发(bug 修复除外)。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.docker.net.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.docker.net.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 中移除

Kubernetes 上的 Compose 弃用之后,CLI 中已移除对 stackcontext 命令中的 Kubernetes 支持,并且与此功能相关的选项现在要么被忽略,要么可能产生错误。

已从 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 中的 Linux 上原生运行 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)标记为 "不推荐",并且像 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 中移除

在 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 在 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 选项,因为对旧选项的支持将在未来的版本中移除。

使用镜像 manifest v2 schema 1 推送和拉取

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

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

目标移除版本:v27.0

镜像清单 v2 schema 1 和 "Docker Image v1" 格式已被弃用,取而代之的是 v2 schema 2OCI image spec 格式。

不应再使用这些旧格式,建议用户更新镜像以使用当前格式,或升级到更新的镜像。从 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.docker.net.cn/go/deprecated-image-specs/

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

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

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

AuFS 存储驱动

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

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

aufs 存储驱动程序有助于在不支持 OverlayFS 的发行版上运行 Docker,例如最初搭载 3.14 内核的 Ubuntu 14.04 LTS。

现在 Ubuntu 14.04 不再是 Docker 支持的发行版,并且 overlay2 可用于所有支持的发行版(因为它们要么使用 4.x 内核,要么已向后移植了对多个 lowerdirs 的支持),因此没有理由继续维护 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 内核,要么已向后移植了对多个 lowerdirs 的支持),因此没有理由继续维护 overlay 存储驱动程序。

Device mapper 存储驱动

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

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

devicemapper 存储驱动程序有助于在不支持其他存储驱动程序(如 overlay2 或 btrfs)的旧(3.x)内核上运行 Docker。

现在所有支持的发行版都已添加了对 overlay2 的支持(因为它们要么使用 4.x 内核,要么已向后移植了对多个 lowerdirs 的支持),因此没有理由继续维护 devicemapper 存储驱动程序。

engine 标签中保留命名空间的使用

在以下版本中弃用:v18.06

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

engine label 中的 com.docker.*io.docker.*org.dockerproject.* 命名空间一直被记录为保留,但从未强制执行。

现在使用这些命名空间会在 engine 日志中产生警告,以阻止使用它们,并在 v20.10 及更高版本中改为报错。

--disable-legacy-registry 覆盖 daemon 选项

在以下版本中禁用: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 协议的意图。

在 1.13 中移除了对公共注册表的 v1 协议支持。任何使用 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

用于按引用(名称或 name:tag)过滤镜像列表的 filter 选项现在已作为常规过滤器实现,名为 reference

repository:shortid 镜像引用

在以下版本中弃用:v1.13.0

在以下版本中移除:v17.12

用于引用镜像的 repository:shortid 语法使用非常少,与 tag 引用冲突,并且容易与 digest 引用混淆。

在 Docker 17.12 中移除了对使用 repository:shortid 表示法引用镜像的支持。

docker daemon 子命令

在以下版本中弃用:v1.13.0

在以下版本中移除:v17.12

守护进程已移至单独的二进制文件 (dockerd),应改为使用此文件。

engine 标签中具有冲突值的重复键

在以下版本中弃用: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

overlay/overlay2 不支持 d_type 的后端文件系统

在以下版本中弃用: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 不再自动在目标注册表注册帐户。由于此更改,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 将 tag 从一个镜像移动到另一个镜像。此外,如果缺少 -f 标志且指定的 tag 已被使用,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 内容信任离线密钥 (Docker Content Trust Offline key) 已重命名为 Root 密钥 (Root key),标签密钥 (Tagging key) 已重命名为仓库密钥 (Repository key)。由于此重命名,我们同时更改了相应的环境变量

  • 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)已弃用,推荐使用 --changes 标志,该标志允许传递 Dockerfile 命令。

docker import 中的三个参数形式

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

在以下版本中移除:v1.12.0

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

页面选项