如何在单个命令中杀死特定的 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>
(可选)
我已经在 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>
(可选)