强制停止并移除Docker容器

3

如何强制删除 Docker 容器,即如果没有运行中的 Docker 容器,则不执行任何操作;如果存在具有名称的正在运行的 Docker 容器,则应停止并删除该容器。

我正在执行以下代码以停止并删除容器。


代码:
docker rm -f CONTAINER_NAME || true

如果有一个正在运行的容器,那么一切正常,但是如果没有容器,就会抛出以下错误:
Error: No such container: CONTAINER_NAME

有没有类似于--force ignore的东西?我需要这个行为才能将它包含在自动化的Makefile中。


首先检查是否存在这样的容器,只有存在时才删除它,怎么样? - KamilCuk
你是如何获取 CONTAINER_NAME 的?当你使用 docker ps 命令时,你可能需要将它与 grepxargs 结合起来使用。 - Walter A
5个回答

7

尝试使用这个退出代码,它将会是1:

docker rm -f CONTAINER_NAME 2> /dev/null

这个退出代码为0:

docker rm -f CONTAINER_NAME 2> /dev/null || true

这会忽略任何错误,不仅仅是“没有这个容器”,对吗? - not2savvy

1
Makefile内置了支持在特定命令前加上破折号以忽略错误的功能。
rmDocker:
    -docker rm -f CONTAINER_NAME
    @echo "Container removed!" 

你仍然会看到错误信息,但是makefile会忽略错误并继续进行。
输出:
docker rm -f CONTAINER_NAME
Error: No such container: CONTAINER_NAME
make: [rmDocker] Error 1 (ignored)
Container removed!

参考文献:

GNU Make手册


0

我更喜欢

docker container inspect CONTAINER_NAME &>/dev/null && docker rm -f CONTAINER_NAME

基于这个答案的解决方案:docker container inspect如果容器不存在则设置返回码为1,否则将其设置为0,所以docker rm也会被执行。

0

您可以按照以下方式添加OR true值:

  • 一个容器

    docker rm -f CONTAINER_1 || true

  • 多个容器

    (docker rm -f CONTAINER_1 || true) && (docker rm -f CONTAINER_2 || true)


-1

作为替代方案,您可以使用docker run --rm命令运行容器。容器将在停止后自动删除。


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