You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

相同OS下docker rm命令在不同机器返回不同状态码求助

Docker rm -f 删除不存在容器时退出码不一致的原因

我尝试删除容器时通过退出码判断操作是否成功,但在不同机器上执行docker rm -f temp(容器temp不存在)时,返回的退出码不一致:

第一台机器操作示例

# First machine
$ docker ps -a
CONTAINER ID   IMAGE                                          COMMAND                  CREATED        STATUS        PORTS                                                                                                          NAMES
$ docker rm -f temp
Error: No such container: temp
$ echo $?
0
# os details
$ uname -a
Linux test-ubuntu 5.4.0-117-generic #132~18.04.1-Ubuntu SMP Thu Jun 2 23:36:48 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

第二台机器(异常情况)

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ docker rm -f temp
Error: No such container: temp
$ echo $?
1
$ uname -a
Linux test-jetson 4.9.253-tegra #1 SMP PREEMPT Sun Jan 2 01:44:04 PST 2022 aarch64 aarch64 aarch64 GNU/Linux

第三台机器操作示例

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ docker rm -f temp
Error: No such container: temp
$ echo $?
0
$ uname -a
Linux my-2nd-jetson 4.9.253-tegra #1 SMP PREEMPT Mon Jul 26 12:19:28 PDT 2021 aarch64 aarch64 aarch64 GNU/Linux

请问出现这种情况的原因是什么?


原因分析

核心原因是Docker版本差异,不同版本对docker rm -f命令处理不存在容器的退出码逻辑有调整:

  • 在Docker 1.13及更早版本中,执行docker rm -f删除不存在的容器时,会返回退出码1,表示操作失败。
  • 从Docker 17.03版本开始,官方调整了逻辑:当使用-f(强制删除)参数时,即使目标容器不存在,命令也会返回退出码0。这是因为-f的设计意图是确保容器被移除——如果容器本来就不存在,相当于“已经达到了移除的状态”,因此判定为操作成功。

你可以在三台机器上执行docker version验证版本差异:第二台机器的Docker版本大概率低于17.03,另外两台的版本则符合17.03及之后的逻辑。


内容的提问来源于stack exchange,提问作者Pranjal Doshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:06:37