1370

这个问题与我是否应该关注多余的、非运行的 Docker 容器有关?.

我想知道如何删除旧容器。docker rm 3e552code34a可以让你删除一个,但我已经有很多了。docker rm --help不提供选择选项(如全部或按图像名称)。

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

4

65 回答 65

1670

Docker 1.13.x 开始,您可以使用Docker container prune

docker container prune

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

还有一个Docker 系统 prune

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

于 2013-06-21T14:25:51.793 回答
646

我从 Guillaume J. Charmes 那里得到的另一种方法(应得的信用):

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

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

Bartosz 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本线程稍后):

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

请参阅PR 26108和提交 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 them
Are you sure you want to continue? [y/N] y
于 2013-08-09T06:41:23.107 回答
423

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

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

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

  • -q仅打印容器 ID(不带列标题)
  • -f允许您过滤打印的容器列表(在这种情况下,我们正在过滤以仅显示退出的容器)
于 2015-04-06T15:34:14.460 回答
260

官方的做法是:

docker rm `docker ps -aq`

Docker 维护人员表示不会有此命令 - 您可以这样编写命令:

我们之前已经讨论过这一点,并且希望用户使用上面的行,而不必向 Docker 添加额外的代码。

于 2014-06-18T04:23:49.903 回答
131

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

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

docker system prune没有 -a 将只删除(对于图像)悬空图像,或没有标签的图像,如smilebomb评论的那样。

请参阅PR 26108和提交 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 them
Are you sure you want to continue? [y/N] y

正如wjv评论的那样,

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

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

docker container prune
于 2016-10-04T19:51:52.650 回答
114

2021 更新(最新)

docker container prune

这 - 2017(旧)方式

删除所有停止的容器

docker rm $(docker ps -a -q)

删除所有容器 (已停止和未停止)

docker rm  -f $(docker ps -a -q)
于 2016-08-08T20:37:25.100 回答
109

现在可以使用过滤docker ps

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

对于图像

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

但是,当没有匹配的容器时,其中任何一个都会导致docker rm或引发错误。docker rmi旧的docker rm $(docker ps -aq)技巧更糟糕,因为它试图删除任何正在运行的容器,每个容器都失败了。

这是一个更简洁的脚本,可以添加到您的~/.bashrcor中~/.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" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

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

于 2014-06-23T02:07:37.200 回答
51

删除所有停止的容器:

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。

于 2014-07-10T16:36:56.707 回答
38

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

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

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

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

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

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

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

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

于 2013-11-07T07:35:06.970 回答
33

更新:从 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
于 2016-04-01T23:54:17.783 回答
23

这是我的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" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

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

于 2014-05-08T11:15:41.507 回答
15

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

删除正在运行的容器

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

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

注意:尝试停止容器会报错:

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

移除所有容器

docker rm $(docker ps -a -q)
于 2013-10-31T16:22:38.343 回答
12

从 Windows shell 中删除所有容器:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
于 2016-04-13T11:45:10.700 回答
11

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

码头工人清理

一个小巧的一体式外壳,可移除:

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

打算作为 crontab 作业运行

特征

  • 它将删除所有<none>:<none>图像
  • 如果图像有多个 repo:tag 引用,它将删除所有 repo:tag ,除非运行容器。实际上它是“docker rmi”的一种性质。
  • 许多错误信息将显示在屏幕上,您可以决定2>/dev/null是否
  • 从 docker-gc 学习一些东西,并解决它的问题(它不能删除具有多个 repo:tag 的图像)
于 2015-05-15T07:41:50.987 回答
10

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

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

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

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

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

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

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

最后,在我的简化示例中,我们一次只处理一个存储库,但如果您有更多,您可以使用相同的想法变得更复杂一些。假设我只想保留 some_repo/some_image 中的最后三张图片。我可以混进去grep然后awk上路:

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

同样,同样的想法也适用于容器,但你现在已经明白了,所以我将不再举例。

于 2014-12-25T23:20:03.943 回答
8

采用:

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

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

于 2016-09-07T10:44:49.380 回答
7

删除 5 个最旧的容器:

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

查看还剩多少个容器:

docker ps -aq | wc -l
于 2014-08-08T09:32:48.053 回答
7

移除所有停止的容器。

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

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

删除所有未标记的图像

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

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

于 2015-11-05T12:25:08.077 回答
6
  1. 删除所有 docker 进程:

    docker rm $(docker ps -a -q)
    
  2. 删除特定容器:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    
于 2014-05-15T09:29:00.337 回答
6

新方法: 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 rm
             OR 
 docker 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 rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
于 2016-11-20T10:51:15.867 回答
5

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

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

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

于 2014-10-29T09:50:56.237 回答
4
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done
于 2014-05-25T23:53:22.233 回答
4

您只能删除已停止的容器。一开始就停止所有这些

docker stop $(docker ps -a -q)

然后你可以删除

docker rm $(docker ps -a -q)

于 2017-05-24T19:11:09.177 回答
3

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

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

于 2014-01-06T14:34:06.277 回答
3

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

  1. 列出所有容器

    docker ps -aq

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

    docker stop $(docker ps -aq)

  3. 移除所有容器

    docker rm $(docker ps -aq)

  4. 删除所有图像

    docker rmi $(docker images -q)

注意:首先,您必须先停止所有正在运行的容器,然后才能删除它们。同样在删除图像之前,您必须停止并删除其依赖容器。

于 2017-08-04T11:30:56.763 回答
3

试试这个命令来清理容器和悬空图像。

docker system prune -a
于 2018-02-08T21:58:23.530 回答
3

我正在使用以下命令删除ExitedRestarting 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}')

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

docker image rm --force $(docker image ls  |grep none |awk '{print $3}')
于 2019-02-27T05:31:34.583 回答
2

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

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')
于 2014-05-19T13:38:04.667 回答
2

在 Ubuntu 14.04 (Trusty Tahr) 上:

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

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

于 2014-10-31T22:03:36.170 回答
2

要删除所有容器:

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

于 2015-02-06T03:11:43.617 回答
2

对于任何有兴趣的人,我从 qkrijger 中获取了示例并将其变成了全部清除(停止并全部删除)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`
于 2015-04-09T06:13:56.707 回答
2

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

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

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

于 2015-07-28T18:32:58.503 回答
2
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi
于 2016-05-19T09:29:47.077 回答
2
docker rm --force `docker ps -qa`
于 2016-10-24T20:57:55.023 回答
2

我正在使用:

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

删除退出的容器和:

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

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

于 2017-02-15T15:14:21.040 回答
2

如果您想自动/定期清理退出的容器并删除正在运行的容器未使用的镜像和卷,您可以下载镜像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 清理

于 2017-06-01T13:12:03.467 回答
2

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

#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
    cont=`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 $k
    if [ $k -ge 2 ];
    then
            echo "Killing docker container $p"
            docker kill $p
            echo "Removing docker container $p"
            docker rm $p
    else
            echo "Docker container $p is not one day old, so keeping the container."
    fi
done </scripts/containers.txt
于 2017-07-11T12:11:21.437 回答
2

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

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

    docker stop $(docker ps -a -q)
    
  2. 移除所有容器

    docker rm $(docker ps -a -q)
    
  3. 删除单个容器

    docker rm container-ID
    
于 2018-01-14T09:27:13.250 回答
2

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

docker rm -f $(docker ps -a -q)
于 2018-02-04T19:03:51.113 回答
2

使用以下嵌套命令:

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

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

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

此命令删除所有容器。

于 2018-04-03T12:59:16.917 回答
2

要删除所有停止的 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>
于 2020-05-18T09:37:38.430 回答
1

我使用以下变体:

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

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

第二个仅选择具有“cassandra”后跟“Exited”的那些。

第三,删除图像 ID 之后的所有测试,因此您会得到一个图像 ID 列表。

所以,

docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)
于 2014-09-19T06:25:10.827 回答
1

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

sudo docker ps -a | grep 'weeks ago\|months ago' | \
    awk '{print $1}' | xargs --no-run-if-empty sudo docker rm
于 2015-06-12T19:08:19.727 回答
1

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

于 2015-07-23T06:44:10.690 回答
1

这两行 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

这个帖子

于 2015-07-29T06:30:18.047 回答
1

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

#!/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>&1
    echo 'Images removed' $IMAGE_IDS
fi


# 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>&1
    echo 'Containers remove $CONTAINER_IDS'
fi
于 2015-10-13T08:11:01.883 回答
1

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

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"
于 2016-01-06T11:41:54.617 回答
1

docker rm -f $(docker ps -a -q)会成功的。它会停止容器并移除它们。

于 2017-07-12T06:45:51.287 回答
1

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

列出所有容器:

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

一旦您点击docker ps -a,它将为您提供容器列表以及容器 ID(它是唯一的,并且是 az、AZ 和 0-9 的组合)。复制您要删除的容器 ID,然后点击下面的内容。

docker rm container_id

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

于 2017-08-02T09:55:32.790 回答
1

这是一个删除所有退出容器的单线。

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

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

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

于 2018-05-10T13:22:52.633 回答
1

删除指定容器

docker container rm container_id

如果容器正在运行,你必须先停止它才能删除它

docker container stop container_id

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

docker container rm $(docker container -a -q)
于 2018-09-06T12:56:01.773 回答
1

使用 docker 管理工具 Portainer

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

它是一个简单的码头工人管理 UI

如何部署 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

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

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

于 2018-11-22T05:27:34.310 回答
1

列出所有容器(仅 ID)

docker ps -aq

停止所有正在运行的容器

docker stop $(docker ps -aq)

移除所有容器

docker rm $(docker ps -aq)

删除所有图像

docker rmi $(docker images -q)
于 2019-07-15T06:16:14.657 回答
1

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

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. 当容器存在时,这将删除容器和关联的文件。

于 2019-09-10T09:56:20.273 回答
1

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

  1. docker container prune. 此命令删除所有当前不工作的容器。docker ps您可以通过比较和的输出来找出哪些容器不工作docker ps -a。列出但docker ps -a不存在docker ps的容器现在无法正常工作,但它们的容器不会被删除。

  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 的操作系统中,您可以像上面的示例一样加入选项。

于 2019-09-23T18:35:42.517 回答
1

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

码头集装箱修剪

此命令将删除所有容器

为什么不清理整个 docker 系统

码头工人系统修剪

于 2020-02-23T12:26:12.577 回答
1

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

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

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

在此处输入图像描述

于 2020-06-30T11:16:21.223 回答
1

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

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

调整 24h 以适应您想要删除旧容器的任何时间跨度。

于 2021-01-17T01:02:36.430 回答
0

在 windows (powershell) 上,您可以执行以下操作:

  1. $containers = 码头工人 ps -a -q
  2. foreach ($container in $containers) {docker rm $container -f }
于 2020-07-16T08:57:53.527 回答
0

要删除所有 docker,: docker system prune -a

于 2021-09-15T04:30:44.527 回答
0

使用以下命令了解容器 ID

docker ps

然后使用以下命令停止它。

docker kill <container-id>
于 2022-02-01T05:36:46.300 回答
0

查看所有现有图像:

docker images -a

查看所有现有容器:

docker ps -a

删除单个图像:

docker images -a
docker rmi <IMAGE_ID>

停止单个容器:

docker ps -a
docker stop <CONTAINER_ID>

停止多个容器:

docker ps -a
docker stop <CONTAINER_ID1> <CONTAINER_ID2>

删除单个容器:

docker ps -a
docker rm <CONTAINER_ID>

删除多个图像:

docker images -a
docker rmi <IMAGE_ID1> <IMAGE_ID2>

删除多个停止的容器:

docker ps -a
docker rm <CONTAINER_ID1> <CONTAINER_ID2>

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

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

修剪所有容器:

docker container prune
于 2022-02-24T07:04:03.953 回答
-1

您可以使用一些 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
于 2016-03-12T18:48:21.500 回答
-2

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

你可以这样:

$ docker stop $(docker ps -a)
$ docker rm $(docker ps -a)
于 2017-09-06T11:05:21.823 回答
-3

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

停止容器:

$ docker stop "containerID" - 你也可以提到容器 ID 的前两个字母,它可以工作。

取出容器

$ docker rm "containerID" - 同样你也可以提到容器的前两个字母

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

于 2015-07-28T18:23:28.573 回答