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

Jenkinsfile中使用$()与sh/bash执行docker kill时出现错误

Jenkinsfile中执行docker kill命令失败的解决方法

问题场景

我在Jenkinsfile中编写了如下Pipeline步骤:

steps {
        sh '''#!/bin/bash
              docker kill $(docker ps -q --filter ancestor=nginx-example )'''
        sh '''docker build -t nginx-example .
              docker run -d -p 8081:80 nginx-example'''
      }

执行时触发错误:

"docker kill" requires at least 1 argument.
See 'docker kill --help'.

Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...]

Kill one or more running containers
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

该命令在Jenkins Pipeline中可正常运行,但在Jenkinsfile中无法执行,需要解决如何在Jenkinsfile中正确使用$()执行docker kill的问题。

解决方法

核心问题是当没有匹配nginx-example的运行中容器时,docker ps -q --filter ancestor=nginx-example返回空值,直接传给docker kill就会触发参数缺失错误。以下是几种可行的解决方式:

方式1:先判断容器是否存在再执行kill

通过Shell条件判断,仅当容器ID非空时执行kill命令:

sh '''#!/bin/bash
      CONTAINER_ID=$(docker ps -q --filter ancestor=nginx-example)
      if [ ! -z "$CONTAINER_ID" ]; then
          docker kill "$CONTAINER_ID"
      fi'''

方式2:用xargs处理空输入

借助xargs -r的特性(标准输入为空时不执行后续命令),避免docker kill接收空参数:

sh '''#!/bin/bash
      docker ps -q --filter ancestor=nginx-example | xargs -r docker kill'''

方式3:改用docker rm -f简化命令

docker rm -f本身支持空输入场景(无匹配容器时不会报错),可以一步完成容器停止与删除:

sh '''docker rm -f $(docker ps -q --filter ancestor=nginx-example)'''

内容的提问来源于stack exchange,提问作者Rus Zzzeta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:12