如何在单个命令中杀死特定的 docker 容器

How to kill a specific docker container in a single command

我已经在 groovy 脚本中设置了一个 jenkins 管道作业....

我正在尝试构建 jenkins 作业,它 运行 是远程服务器上的 docker 命令。 我的詹金斯预计将连接到远程服务器并执行

       docker run -d -p 60:80 <image name>
  

为此,我在 jenkins 管道作业中使用了以下 groovy 脚本

     stage ('Deploy on App Server')
     {
         def dockrun = 'docker run -d -p 60:80 <image name>'
         sshagent(['dev-servr-crdntls'])
         {
             sh "ssh -o StrictHostKeyChecking=no ubuntu@xx.xxx.xx.xx ${dockrun}" 
         }
     }

这个脚本 运行 非常好。 Jenkins 正在连接到远程服务器并且 运行 正在 docker 命令和应用程序 运行 正在端口 60 上。

但是因为这是在 CICD 的 jenkins 管道中,下次当构建为 运行 作业失败时,因为端口 60 已经分配。 .

我想在 运行 执行 docker 运行 -d -p ......命令之前关闭端口 60。有什么建议请

您可以使用以下命令杀死占用给定端口的 运行 容器:

docker kill $(docker ps -qf expose=<port>)

解释: docker ps 命令允许列出容器并有很多有用的选项。其中之一是 -f 标志,用于根据某些属性过滤容器。现在您可以使用 -f expose=<port> 筛选占用 <port> 的 运行 容器。另外,-q标志可以用来只输出容器ID。此输出可用作 docker kill 命令的输入。

编辑: 因为如果给定端口上没有容器 运行,上述命令可能会失败并出现错误,因此可以使用以下命令来规避此问题:

docker kill $(docker ps -qf expose=<port>) 2> /dev/null || echo 'No container running on port <port>'

现在,该命令将终止占用 <port> 的容器(如果该容器存在并且是 运行),或者输出 No container 运行 on port <port>(可选)