停止并删除正在运行的Docker容器

151

我希望能够在构建脚本中,以实用的方式停止和删除正在运行的Docker容器。以下是一个示例,在bash脚本中如何停止并删除“rabbitmq” Docker容器(该容器在NAMES列中可见)?

docker ps

CONTAINER ID        IMAGE             COMMAND                  CREATED             STATUS              PORTS                   NAMES
9909a5e2856f        rabbitmq-image   "/docker-entrypoint.s"   11 minutes ago      Up 11 minutes       0.0.0.0:5672->5672/tcp, rabbitmq
8990dd1fe503        redis-image      "/entrypoint.sh redis"   6 weeks ago         Up 4 days           0.0.0.0:32770->6379/tcp redis
etc 
以下命令将删除容器并完成我想要的操作。
docker stop rabbitmq && docker rm -f rabbitmq

然而,我想知道如何将其组合成脚本?我认为它应该看起来像这样。

#!/bin/bash

if [ /*docker ps check some value */ ]; then
   docker stop rabbitmq && docker rm -f rabbitmq
fi
16个回答

2

如果你想要停止并移除所有内容,请在script.sh中复制此代码:stopremove

#!/bin/sh
ids=$(docker ps -a -q)
for id in $ids
do
  echo "$id"
  docker stop $id && docker rm $id
done

1
在以下情况下:
1. Windows上的Docker(wsl2) 2. 同一台Windows上的Jenkins服务器。 3. 使用Jenkins管道构建和运行容器。 4. 在管道中使用批处理脚本。
在这种情况下,您可以使用以下命令来防止构建失败。
'docker stop rabbitmq && docker rm rabbitmq || exit 0;'

0

解决这个问题的简单方法

docker container ls -al | grep <name> && docker container rm -f <name>

0
如果您不删除已停止的容器,处理此问题的另一种简单方法是依赖于 docker ps -a,它将始终返回该容器ID。然后,在停止的容器上执行 docker stop 将具有幂等性且不会产生影响:

docker stop $(docker ps -a --filter name= rabbitmq -q )


0
在 CI/CD 管道或者不需要输出的情况下,我使用的方法是这样的:
docker rm -f rabbitmq &> /dev/null

但是据我了解,&> 不是官方 POSIX 规范的一部分,因此我们应该使用:

docker rm -f rabbitmq 1> /dev/null 2>&1

-f(force)在docker rm -f中的含义:

强制删除正在运行的容器(使用SIGKILL)

而不是使用docker stop发送:

.. SIGTERM,并在宽限期后发送SIGKILL

1> /dev/nul将输出1(stdout)重定向到/dev/null2>&1将错误2(stderr)重定向到同一“文件”。与第一个示例相同,&同时重定向1和2。

要写入实际文件并追加内容,请使用docker rm -f rabbitmq 1>> docker_rabbitmq.txt 2>&1或不同的文件docker rm -f rabbitmq 1>> docker_rabbitmq_success.txt 2>> docker_rabbitmq_error.txt


-3

要停止所有容器,您首先必须使用

stop

命令停止所有容器。

docker kill $(docker ps -q)

并删除所有容器

docker rm $(docker ps -a -q)

如果你想删除所有图片,这是命令

docker rmi $(docker images -q)

1
你不能在共享环境中这样做。比如,假设你有两个正在运行的流水线。 - igor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接