相同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
相关产品推荐
相关产品推荐

