如何删除旧的Docker容器

这个问题与我应该担心多余的、未运行的Docker容器吗?有关。

我想知道如何删除旧容器。docker rm 3e552code34a允许您删除一个,但我已经有很多了。docker rm --help没有给出选择选项(像所有一样,或按图像名称)。

也许有一个存储这些容器的目录,我可以轻松手动删除它们?

834809 次浏览

Docker容器修剪130-2017-01-18" rel="noreferrer">docker 1.13. x开始,您可以使用Docker容器修剪

docker container prune

这将删除所有停止的容器,并且应该以相同的方式在所有平台上工作。

还有一个docker系统修剪

docker system prune

它将在一个命令中清理所有未使用的容器、网络、图像(悬空和未引用)以及可选的卷。


对于较旧的Docker版本,您可以将Docker命令与其他Unix命令串在一起以获得所需的内容。这是一个关于如何清理几周前的旧容器的示例:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

为了给信用,在它到期的地方,这个例子来自https://twitter.com/jpetazzo/status/347431091415703552

另一种方法,我从Guillaume J. Charmes那里得到的(学分到期):

docker rm `docker ps --no-trunc -aq`

将以优雅的方式删除所有容器。

而Bartopz Bilicki,对于Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

对于PowerShell:

docker rm @(docker ps -aq)

Docker 1.13(2016年第四季度)的更新,归功于VonC稍后在这个线程):

#0将删除所有未使用的数据(即,按顺序:停止的容器、没有容器的卷和没有容器的图像)。

请参阅p26108提交86de7c0,它们引入了一些新命令,以帮助可视化Docker守护程序数据在磁盘上占用了多少空间,并允许轻松清理“不需要的”多余空间。

docker system prune
WARNING! This will remove:- all stopped containers- all volumes not used by at least one container- all images without at least one container associated to themAre you sure you want to continue? [y/N] y

首先,在尝试删除容器之前停止运行容器

删除正在运行的容器

docker rm $(docker stop -t=1 $(docker ps -q))

您可以使用kill而不是stop。在我的情况下,我更喜欢stop,因为我倾向于重新运行它们而不是每次都创建一个新的,所以我试图很好地关闭它们。

备注:尝试停止容器会给你一个错误:

错误:无法删除正在运行的容器,请先停止它

删除所有容器

docker rm $(docker ps -a -q)

如果您不想删除所有容器,您可以选择在docker ps -f before=<container-ID>docker ps -f since=<container-ID>的特定容器之前或之后创建的所有容器

假设您已经开发了您的系统,现在它正在工作,但是还剩下许多容器。您想删除在该工作版本之前创建的容器。使用docker ps确定工作容器的ID。

删除在其他容器之前创建的容器

docker rm $(docker ps -f before=9c49c11c8d21 -q)

另一个例子。您的数据库已经在Docker容器上运行。您已经开发了在另一个容器上运行的应用程序,现在您有许多不需要的容器。

删除在某个容器之后创建的容器

docker rm $(docker ps -f since=a6ca4661ec7f -q)

Docker将容器存储在Ubuntu的/var/lib/docker/containers中。我认为额外的容器没有其他伤害,但会占用磁盘空间。

我总是使用docker rmi $(docker ps -a -q)来删除所有图像。

docker rmi失败时,您可以删除目录/var/lib/docker/graph

这是我的docker-cleanup脚本,它删除了未标记的容器和图像。请检查源以获取任何更新。

#!/bin/sh# Cleanup docker files: untagged containers and images.## Use `docker-cleanup -n` for a dry run to see what would be deleted.
untagged_containers() {# Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'}
untagged_images() {# Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.# NOTE: intermediate images (via -a) seem to only cause# "Error: Conflict, foobarid wasn't deleted" messages.# Might be useful sometimes when Docker messed things up?!# docker images -a | awk '$1 == "<none>" {print $'$1'}'docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'}
# Dry-run.if [ "$1" = "-n" ]; thenecho "=== Containers with uncommitted images: ==="untagged_containers 0echo
echo "=== Uncommitted images: ==="untagged_images 0
exitfi
# Remove containers with untagged images.echo "Removing containers:" >&2untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true
# Remove untagged imagesecho "Removing images:" >&2untagged_images 3 | xargs --no-run-if-empty docker rmi

来源:https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup

  1. 删除所有docker进程:

    docker rm $(docker ps -a -q)
  2. Remove specific container:

    $ docker ps -a (lists all old containers)
    $ docker rm container-Id

删除从某个映像创建的所有容器:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')
#!/bin/bash# docker-gc --- Remove stopped docker containers
RUNNING=$(docker ps -q)ALL=$(docker ps -a -q)
for container in $ALL ; do[[ "$RUNNING" =~ "$container" ]] && continueecho Removing container: $(docker rm $container)done

官方的方式是:

docker rm `docker ps -aq`

Docker维护者已经表示不会有这样的命令——你可以这样编写命令:

我们之前已经讨论过这个问题,并且希望用户使用上面的行,而无需向Docker添加额外的代码。

现在可以将过滤docker ps一起使用:

docker rm $(docker ps -q -f status=exited)

对于图像

docker rmi $(docker images -q -f "dangling=true")

然而,当没有匹配的容器时,任何这些都会导致docker rmdocker rmi抛出错误。旧的docker rm $(docker ps -aq)技巧更糟糕,因为它试图删除任何正在运行的容器,每个容器都失败了。

这是一个更清晰的脚本,可以添加到您的~/.bashrc~/.profile中:

# Use `docker-cleanup --dry-run` to see what would be deleted.
function docker-cleanup {EXITED=$(docker ps -q -f status=exited)DANGLING=$(docker images -q -f "dangling=true")
if [ "$1" == "--dry-run" ]; thenecho "==> Would stop containers:"echo $EXITEDecho "==> And images:"echo $DANGLINGelseif [ -n "$EXITED" ]; thendocker rm $EXITEDelseecho "No containers to remove."fiif [ -n "$DANGLING" ]; thendocker rmi $DANGLINGelseecho "No images to remove."fifi}

编辑:如下所述,最初的答案是删除图像,而不是容器。更新以回答两者,包括留档的新链接。感谢Adrian(和Ryan的回答)提到新的ps过滤。

删除所有停止的容器:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

来自pauk960的评论:

从版本1.3.0开始,您可以使用docker ps的过滤器,而不是grep Exited使用docker ps -a -f status=exited。如果您使用-q,您可以仅获得容器ID而不是完整输出,则无需使用awk。

删除5个最旧的容器:

docker rm `docker ps -aq | tail -n 5`

看看还剩多少集装箱:

docker ps -aq | wc -l

我使用以下的变体:

docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1

第一部分列出了所有过程。

第二个只选择那些有“cassandra”后跟“退出”的。

第三,删除图像ID之后的所有测试,因此您将获得图像ID列表。

所以,

docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)

您可以使用以下命令删除退出的容器:

docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

以下是删除docker上旧图像的完整要点:Gist删除旧的Docker容器和镜像

在Ubuntu 14.04(TrustyTahr)上:

$ for CON in `docker ps -qa`; do docker rm $CON ; done

这只是一个普通的Bash命令,因此它应该适用于每个符合Bash的终端。

所以,我个人建议将此作为映像和容器部署脚本的一部分,只保留最近的n个容器和映像。我使用与git tag相同的版本控制模式标记我的Docker映像,并始终用“最新”标记最新的Docker映像。这意味着,在不清理任何东西的情况下,我的Docker映像最终看起来像:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZEsome_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MBsome_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MBsome_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MBsome_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MBsome_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MBsome_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

现在,当然,我不想让我所有的图像(或容器)在我所有的生产盒上永久保存。我只想要最后3或4个用于回滚并摆脱其他所有东西。Unix的tail在这里是你最好的朋友。由于docker imagesdocker ps都按日期排序,我们可以使用tail选择除前三个之外的所有图像并将它们删除:

docker rmi $(docker images -q | tail -n +4)

将其与部署脚本(或本地)一起运行,以始终保留足够的图像以舒适地回滚,而不会占用太多空间或将旧图像弄乱。

就我个人而言,我在任何时候都只在我的生产盒上保留一个容器,但是如果你想要更多,你可以用容器做同样的事情:

docker rm $(docker ps -aq | tail -n +4)

最后,在我的简化示例中,我们一次只处理一个存储库,但是如果你有更多,你可以用同样的想法变得更加复杂。假设我只想保留some_repo/some_image的最后三个图像。我可以混合grepawk然后继续前进:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

同样,同样的想法也适用于容器,但您已经了解了这一点,所以我将停止给出示例。

删除所有容器:

sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f

说明:

sudo docker ps -a

返回容器列表。

awk '{print $1}'

获取作为容器ID的第一列。

grep -v CONTAINER

删除标题。

最后一个管道将ID安全地发送到sudo docker rm -f

更新答案现在使用docker system prunedocker container prune。见VonC的更新答案

以前的答案组合上面几个不同的提示,删除所有非运行容器的最优雅的方法似乎是:

docker rm $(docker ps -q -f status=exited)

  • -q只打印容器id(没有列标题)
  • -f允许您过滤打印的容器列表(在这种情况下,我们过滤仅显示退出的容器)

对于任何感兴趣的人,我从qkrijger中获取了这个例子,并将其转换为一个清晰的all(停止并删除所有)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`

https://github.com/HardySimpson/docker-cleanup

Docker清理

一个微小的一体化外壳,它删除了:

  • 未运行超过一天的容器
  • 不属于任何剩余容器的图像

打算作为crontab作业运行

功能

  • 它将删除所有<none>:<none>图像
  • 如果图像有多个repo: tag引用,它将删除所有repo: tag,除了运行容器。实际上,它是“docker rmi”的本质。
  • 许多错误消息将显示在屏幕上,您可以决定2>/dev/null或不
  • 从docker-gc中学习一些东西,并修复它的问题(它无法删除具有multiliple repo: tag的图像)

对于Linux安装,请确保使用sudo。此外,查找几个月或几周前的图像也很好:

sudo docker ps -a | grep 'weeks ago\|months ago' | \awk '{print $1}' | xargs --no-run-if-empty sudo docker rm

您可以从存储库https://github.com/kartoza/docker-helpers中使用docker-helper。安装后,只需键入drmc

您可以停止docker容器,一旦它停止,您就可以删除容器。

停止容器:

#关闭docker的容器ID-您还可以提及容器ID的前两个字母,并且它有效。

移开容器

$docker rm"容器ID"请求参数名-你也可以提到容器的前两个字母

如果这些命令不允许您停止/删除容器,m,确保您对docker host有sudo访问权限。

要简单地删除当前未被正在运行的容器使用的所有内容,我通常将以下别名放入Mac上的.bash_profile中,将有所帮助:

alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"

每当从命令行调用dockerclean时,它将删除停止的容器以及未使用的图像层。对于正在运行的容器和使用的图像,它将打印一条警告消息并跳过它。

这两行Bash将在删除容器之前通过一些关键字过滤容器:

containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')docker rm $containers_to_delete

这篇文章

这个简短的脚本可能会有所帮助(从以前的答案编译而来)!

#!/bin/bash
# Remove dangling images
IMAGE_IDS=$(sudo docker images -f "dangling=true" -q)
if [ -n "$IMAGE_IDS" ]; then
sudo docker rmi $IMAGE_IDS > /dev/null 2>&1echo 'Images removed' $IMAGE_IDSfi

# Remove exited containers
CONTAINER_IDS=$(sudo docker ps -a -q -f status=exited)
if [ -n "$CONTAINER_IDS" ]; then
sudo docker rm -v $CONTAINER_IDS > /dev/null 2>&1echo 'Containers remove $CONTAINER_IDS'fi

卸下所有停止的容器。

sudo docker rm$(sudo docker ps-a-q)//镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像文件夹,镜像

这将通过获取包含docker ps-a-q的所有容器的列表并将它们的id传递给docker rm来删除所有停止的容器。这不应该删除任何正在运行的容器,它会告诉您它无法删除正在运行的映像。

删除所有未标记的图像

现在您想清理旧图像以节省一些空间。

sudo docker rmi$(sudo docker图片-q--filter"悬挂=true")

根据我的经验,您应该在删除容器之前停止容器,以避免出现“此容器仍在运行”之类的错误,因此:

sudo /usr/bin/docker ps -aq |  awk '{print $1}' | \xargs --no-run-if-empty bash -c 'sudo docker stop $@; sudo docker rm $@' bash

我在我的点文件中保留了一个别名,例如:

alias wipedocker="sudo /usr/bin/docker ps -aq |  awk '{print $1}' \| xargs --no-run-if-empty bash -c 'sudo docker stop $@; sudo docker rm $@' bash"

您可以使用一些Docker UI应用程序来删除容器。

抱歉广告,但我总是使用我自己的应用程序来做同样的事情。如果您正在寻找一个简单的应用程序来管理Docker映像或容器,您可以尝试一下:https://github.com/alex-agency/AMHub

这是一个在Docker容器内运行的Docker UI Web应用程序。要安装它,您只需要调用以下命令:

docker run -d -p 80:80 -p 8000:8000 -e DOCKER=$(which docker) -v /var/run/docker.sock:/docker.sock alexagency/amhub

更新时间:从Docker版本1.13(2017年1月发布)开始,您可以发出以下命令来清理停止的容器、未使用的卷、悬空映像和未使用的网络:

docker system prune

如果您想确保仅删除具有exited状态的容器,请使用:

docker ps -aq -f status=exited | xargs docker rm

类似地,如果你正在清理docker的东西,你可以通过这种方式摆脱未标记、未命名的图像:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

从Windows shell中删除所有容器:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
#!/bin/bash
echo Cleanup unused containersunused_containers=$(docker ps -a -q --filter="status=exited")if [[ -n $unused_containers ]]thendocker rm $unused_containersfi
echo Cleanup unused imagesunused_images=$(docker images | grep '^<none>' | awk '{print $3}')if [[ -n $unused_images ]]thendocker rmi $unused_imagesfi

更新中2021年(最新)

docker container prune

2017(旧)方式

删除所有停运的集装箱

docker rm $(docker ps -a -q)

删除所有集装箱(停止和不停止)

docker rm  -f $(docker ps -a -q)

用途:

docker rm -f $(docker ps -a -q)

它强行停止并移除本地存在的所有容器。

使用Docker 1.13(2016年第四季度),您现在拥有:

#0将删除所有未使用的数据(即,按顺序:停止的容器、没有容器的卷和没有容器的图像)。

不带-a的docker system prune将删除(对于图像)仅悬挂的图像或没有标签的图像,如评论 by笑脸炸弹

请参阅p26108提交86de7c0,它们引入了一些新命令,以帮助可视化Docker守护程序数据在磁盘上占用了多少空间,并允许轻松清理“不需要的”多余空间。

docker system prune -a
WARNING! This will remove:- all stopped containers- all volumes not used by at least one container- all images without at least one container associated to themAre you sure you want to continue? [y/N] y

wjv评论,

还有docker {container,image,volume,network} prune,它可用于删除仅一个类型对象的未使用实例。

提交913e5cb中引入,仅适用于Docker 1.13+。

docker container prune
docker rm --force `docker ps -qa`

<强>新方式:Spotify/docker-gc玩这个把戏。

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • 一个多小时前离开的集装箱被移除。
  • 删除后不属于任何剩余容器的图像

它支持环境设置

强制删除具有多个标签的图像

 FORCE_IMAGE_REMOVAL=1

强制删除容器

 FORCE_CONTAINER_REMOVAL=1

从垃圾收集中排除最近退出的容器和图像

 GRACE_PERIOD_SECONDS=86400

此设置还可以防止删除不到GRACE_PERIOD_SECONDS秒前创建的图像。

试运行

 DRY_RUN=1

清理孤立的容器卷CLEAN_UP_VOLUMES=1

参考:docker-gc

老办法做:

删除旧的、未运行的容器

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rmORdocker rm $(docker ps -a -q)

删除与非运行的docker容器关联的所有映像

 docker images -q | xargs --no-run-if-empty docker rmi

清理docker版本1.10. x及更高版本的孤立docker卷

 docker volume ls -qf dangling=true | xargs -r docker volume rm

基于时间段

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rmdocker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rmdocker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm

我正在使用:

docker rm -v $(docker ps -a -q -f status=exited)

删除退出的容器并:

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

为了摆脱所有未标记的图像。

您只能删除停止的容器。在开始时停止所有容器

docker stop $(docker ps -a -q)

然后你可以删除

docker rm $(docker ps -a -q)

如果您想自动/定期清理退出的容器并删除正在运行的容器未使用的映像和卷,您可以下载映像meltwater/docker-cleanup

我在生产中使用它,因为我们每天在多个服务器上部署几次,我不想去每个服务器清理(这会很痛苦)。

只需运行:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

默认情况下,它将每30分钟运行一次(或者使用DELAY_TIME=1800选项设置多长时间),并清理退出的容器和图像。

更多详情:Docker清理

这是一个删除创建时间超过2天的正在运行和退出的容器的脚本:

#!/bin/bash# This script will kill and remove containers older than 2 days.#docker ps -aq > /scripts/containers.txttoday=`date +%Y-%m-%d`oldate=`date --date="2 day ago" +%Y-%m-%d`while read p; docont=`docker inspect -f '\{\{ .Created }}' $p | cut -c 1-10`echo " Created date of $p is $cont"k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))`echo $kif [ $k -ge 2 ];thenecho "Killing docker container $p"docker kill $pecho "Removing docker container $p"docker rm $pelseecho "Docker container $p is not one day old, so keeping the container."fidone </scripts/containers.txt

docker rm -f $(docker ps -a -q)将完成此操作。它将停止容器并将其删除。

删除旧的Docker容器非常容易。

列出所有容器:

docker ps -adocker ps (To list the running containers)

点击docker ps -a后,它将为您提供容器列表以及容器ID(唯一且由a-z、A-Z和0-9组合)。复制您要删除的容器ID并简单地点击下面。

docker rm container_id

您的容器将与/var/lib/docker/aufs中创建的图层一起删除(如果您使用的是Ubuntu)。

停止/删除所有容器和映像的基本步骤

  1. 列出所有的容器

    docker ps -aq

  2. 停止所有正在运行的容器

    docker stop $(docker ps -aq)

  3. 删除所有容器

    docker rm $(docker ps -aq)

  4. 删除所有图片

    docker rmi $(docker images -q)

备注:首先,您必须在删除它们之前停止所有正在运行的容器。此外,在删除图像之前,您必须停止并删除其依赖容器。

我建议你先停止图像,然后删除。

你可以这样做:

$ docker stop $(docker ps -a)$ docker rm $(docker ps -a)

此过程包含两个步骤(停止和删除):

  1. 停止任何正在运行的微服务正在使用的容器

    docker stop $(docker ps -a -q)
  2. Remove all the containers

    docker rm $(docker ps -a -q)
  3. Remove single container

    docker rm container-ID

我发现下面的命令非常方便地停止和删除所有容器。如果您使用-f(force)标志,您不需要使用另一个命令显式停止,因为它会停止所有正在运行的容器:

docker rm -f $(docker ps -a -q)

尝试此命令清理容器和悬挂的图像。

docker system prune -a

使用以下嵌套命令:

$ sudo docker stop $(sudo docker ps -a -q)

此命令停止所有正在运行的容器。

$ sudo docker rm $(sudo docker ps -a -q)

此命令删除所有容器。

这是一个删除所有退出容器的单行程序。

docker rm $(docker ps -a | grep Exited | grep -v CON | awk '{print $1}')

如果你想删除所有的图像,你可以使用这样的东西。

docker rmi $(docker images | sed -n '1!p' | awk '{print $3}')

删除指定的容器

docker container rm container_id

如果容器正在运行,你必须在删除它之前停止它

docker container stop container_id

这个命令是删除所有现有的容器

docker container rm $(docker container -a -q)

使用docker管理工具Portainer

我们可以使用此工具管理所有旧容器,不使用卷和图像

一个简单的Dockers管理界面

如何部署PORTAINER

使用以下Docker命令部署Portainer:

$ docker volume create portainer_data$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

您只需要访问Docker引擎的端口9000,其中portainer正在使用您的浏览器运行。

注意:-v /var/run/docker.sock:/var/run/docker.sock选项只能在Linux环境中使用。

我正在使用以下命令删除退出重启 docker容器

docker stop --force $(docker ps -a|grep Exited| awk '{print $1}')docker rm --force $(docker ps -a|grep Exited| awk '{print $1}')docker stop --force $(docker ps -a|grep Restarting| awk '{print $1}')docker rm --force $(docker ps -a|grep Restarting| awk '{print $1}')

使用以下命令删除名为没有的图像

docker image rm --force $(docker image ls  |grep none |awk '{print $3}')

列出所有容器(仅ID)

docker ps -aq

停止所有正在运行的容器

docker stop $(docker ps -aq)

删除所有容器

docker rm $(docker ps -aq)

删除所有图像

docker rmi $(docker images -q)

要摆脱停止的容器,您可以使用:

docker rm <cointainer_id>

您还可以使用容器的名称:

docker rm <name>

如果你想摆脱所有停止的容器,你可以使用:

docker container prune

或者你也可以使用:

docker rm $(docker ps -aq -f status=exited)

您可以使用-v参数删除任何不再引用的docker托管卷

docker rm -v $(docker ps -aq -f status=exited)

您还可以将--rmdocker run一起使用。这将在容器存在时删除容器和关联的文件。

您可以使用多种方法删除容器,我将在答案的其余部分解释它们。

  1. docker container prune。此命令删除了所有现在不工作的容器。您可以通过比较docker psdocker ps -a的输出来找出哪些容器不工作。docker ps -a中列出的容器现在不工作,但它们的容器没有被删除。

  2. docker kill $(docker ps -aq)。此命令的作用是通过执行$(docker ps -aq)返回所有容器的id列表并杀死它们。有时此命令不起作用,因为它正在被正在运行的容器使用。要使其起作用,您可以使用--force选项。

  3. docker rm $(docker ps -aq)。它与第二个命令的定义相同。它们唯一的区别是它删除了容器(与docker prune相同),而docker kill没有。

  4. 有时需要删除图像,因为您更改了Dockerfile的配置,需要删除它来重建它。为此,您可以通过运行docker images查看所有图像,然后复制要删除的图像的ID。只需执行docker image rm <image-id>即可删除它。

PS:您可以使用docker ps -a -q而不是docker ps -aq,没有区别。因为在基于unix的操作系统中,您可以像上面的示例一样加入选项。

如果要删除所有容器,请使用

docker容器修剪

此命令将删除所有容器

为什么不清理整个docker系统

docker系统修剪

要删除都停了 docker容器,请运行:-

$ docker container prune

您必须小心使用此命令,因为它会不分青红皂白地删除所有停止的容器,因此请确保没有您可能仍在使用的停止/当前未使用容器。

更精确的替代方法是通过ID删除容器。您必须首先使用以下命令列出停止容器:-

docker ps --filter "status=exited"

然后复制要删除的容器的ID。之后,执行以下命令删除一个单一容器,

docker container rm <container ID>

或下面的一个,通过运行一次删除多个容器:-

docker container rm <container ID 1> <container ID 2> <container ID n>

对于Windows,您可以运行此命令来停止和删除所有容器:

@echo offFOR /f "tokens=*" %%i IN ('docker ps -q') DO docker stop %%iFOR /f "tokens=*" %%i IN ('docker ps -aq') DO docker rm %%iFOR /f "tokens=*" %%i IN ('docker images --format "\{\{.ID}}"') DO docker rmi %%i

您可以将其保存为. bat文件并运行以执行此操作:

输入图片描述

在Windows(PowerShell)上,你可以这样做:

  1. #使用docker ps-a-q#容器
  2. Foreach($容器中的$容器){docker rm$容器-f}

我想添加这个简单的答案,因为我没有看到它,这个问题特别是“旧”而不是“全部”。

sudo docker container prune --filter "until=24h"

调整24小时的时间跨度,无论你想删除的容器比。

删除所有的docker: docker system prune-a

使用下面的命令了解容器ID

docker ps

然后使用下面的命令来阻止它。

docker kill <container-id>

查看所有现有图像:

docker images -a

查看所有现有容器:

docker ps -a

删除单个图像:

docker images -adocker rmi <IMAGE_ID>

停止单个容器:

docker ps -adocker stop <CONTAINER_ID>

停止多个容器:

docker ps -adocker stop <CONTAINER_ID1> <CONTAINER_ID2>

删除单个容器:

docker ps -adocker rm <CONTAINER_ID>

删除多个图像:

docker images -adocker rmi <IMAGE_ID1> <IMAGE_ID2>

删除多个停止的容器:

docker ps -adocker rm <CONTAINER_ID1> <CONTAINER_ID2>

仅在单个命令中删除图像:

docker rmi -f $(docker images -a -q)

在单个命令中删除容器和图像:

docker rm $(docker ps -a -q) && docker rmi -f $(docker images -a -q)

要修剪所有容器:

docker container prune

一个伟大的自动替代方案-容器/瞭望塔

它包含图像自动清理、更新和监控选项

version: "3.9"services:service:container_name: watchtowerimage: containrrr/watchtower:latesthostname: watchtowerenvironment:- TZ=Europe/Bucharest- WATCHTOWER_CLEANUP=true- WATCHTOWER_INCLUDE_RESTARTING=true- WATCHTOWER_POLL_INTERVAL=86400#- WATCHTOWER_SCHEDULE=0 0 4 * * *- WATCHTOWER_LABEL_ENABLE=false- WATCHTOWER_MONITOR_ONLY=false- WATCHTOWER_NO_PULL=false- WATCHTOWER_NO_RESTART=falsevolumes:- /var/run/docker.sock:/var/run/docker.sockrestart: unless-stopped