如何删除旧的Docker容器

时间:2013-06-21 13:41:43

标签: docker

此问题与 Should I be concerned about excess, non-running, Docker containers?

有关

我想知道如何移除旧容器。 docker rm 3e552code34a允许您删除一个,但我已经有很多。 docker rm --help未提供选择选项(例如全部或按图片名称)。

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

62 个答案:

答案 0 :(得分:1261)

Docker 1.13.x中有一项名为Docker container prune的新功能: docker container prune

这将做你想要的,并且应该以相同的方式在所有平台上工作。

还有Docker system prunedocker system prune,它将在一个命令中清理容器,图像,卷和网络。

原始答案:

有一些关于Docker清理命令的讨论。您可以在此门票上找到相关信息: Implement a 'clean' command (#928)

在该命令可用之前,您可以将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

答案 1 :(得分:611)

另一种方法,我从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年第4季度)进行更新,归功于VonClater in this thread):

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

请参阅PR 26108commit 86de7c0,它们引入了一些新命令,以帮助显示Docker守护程序数据在磁盘上占用多少空间,并允许轻松清理“不需要的”多余部分。 / p>

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

答案 2 :(得分:405)

更新了答案 立即使用docker system prunedocker container prune。请参阅VonC's updated answer

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

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

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

答案 3 :(得分:249)

The official way是:

docker rm `docker ps -aq`

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

  

我们之前已经讨论过此,并且希望用户使用上述代码而无需向Docker添加其他代码。

答案 4 :(得分:124)

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

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

没有-a的

docker system prune只会删除(对于图像)只有悬空图片或没有标记的图片commented smilebomb

请参阅PR 26108commit 86de7c0,它们引入了一些新命令,以帮助显示Docker守护程序数据在磁盘上占用多少空间,并允许轻松清理“不需要的”多余部分。 / p>

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,可用于删除仅一个类型对象的未使用实例。

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

docker container prune

答案 5 :(得分:103)

现在可以将filteringdocker ps

一起使用
docker rm $(docker ps -q -f status=exited)

对于images

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" ]; 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过滤。

答案 6 :(得分:91)

更新 2017 (最新)

docker container prune

这 - 2017 (旧)方式

删除所有已停止的容器

docker rm $(docker ps -a -q)

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

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

答案 7 :(得分:49)

删除所有已停止的容器:

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。

答案 8 :(得分:33)

如果您不想删除所有容器,则可以选择在具有docker ps --before <container-ID>docker ps --since <container-ID>的特定容器之前或之后创建的所有容器。此功能至少在Docker版本0.6.5中。

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

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

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

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

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

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

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

答案 9 :(得分:32)

更新:从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

答案 10 :(得分:22)

这是我的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

答案 11 :(得分:13)

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

删除正在运行的容器

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

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

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

  

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

删除所有容器

docker rm $(docker ps -a -q)

答案 12 :(得分:11)

从Windows shell中删除所有容器:

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

答案 13 :(得分:9)

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

Docker清理

一个很小的一体化shell,删除:

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

打算作为crontab作业运行

功能

  • 它会删除所有<none>:<none>张图片
  • 如果图像有多个repo:tag引用,它将删除所有repo:标记,但运行容器除外。实际上它是&#34; docker rmi&#34;的性质。
  • 屏幕上会显示许多错误消息,您可以决定是否2>/dev/null
  • 从docker-gc学习一些东西并解决它的问题(它不能删除有多个repo:tag的图像)

答案 14 :(得分:8)

使用:

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

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

答案 15 :(得分:7)

因此,我个人建议将此作为图像和容器的部署脚本的一部分,仅保留最近的n个容器和图像。我使用与git tag相同的版本控制模式标记我的Docker镜像,并始终使用“最新”标记最新的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回滚并摆脱其他一切。 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)

同样,同样的想法适用于容器,但是到目前为止你得到了它,所以我将停止给出例子。

答案 16 :(得分:7)

删除所有已停止的容器。

  

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

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

删除所有未标记的图片

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

  

sudo docker rmi $(sudo docker images -q --filter&#34; dangling = true&#34;)

答案 17 :(得分: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 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

答案 18 :(得分:6)

  1. 删除所有泊坞窗进程:

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

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

答案 19 :(得分:5)

删除5个最旧的容器:

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

查看剩余的容器数量:

docker ps -aq | wc -l

答案 20 :(得分:4)

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

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

以下是删除docker上旧图像的完整要点:Gist to remove old Docker containers and images

答案 21 :(得分:3)

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

docker system prune -f

答案 22 :(得分:3)

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

docker stop $(docker ps -a -q)

然后你可以删除

docker rm $(docker ps -a -q)

答案 23 :(得分:3)

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

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

答案 24 :(得分:3)

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

  1. 列出所有容器

    docker ps -aq

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

    docker stop $(docker ps -aq)

  3. 删除所有容器

    docker rm $(docker ps -aq)

  4. 删除所有图片

    docker rmi $(docker images -q)

  5. 注意:首先,您必须在删除所有正在运行的容器之前停止它们。在删除图像之前,您必须停止并删除其相关容器。

答案 25 :(得分:3)

#!/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

答案 26 :(得分:2)

删除从特定图像创建的所有容器:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')

答案 27 :(得分: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 Cleanup

答案 28 :(得分: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

答案 29 :(得分:2)

docker rm --force `docker ps -qa`

答案 30 :(得分:2)

在Ubuntu 14.04(Trusty Tahr)上:

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

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

答案 31 :(得分:2)

在不哭的情况下移除所有容器:

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

答案 32 :(得分:2)

对于任何有兴趣的人,我从qkrijger那里拿了一个例子并把它变成一个清晰的全部(停止并删除全部)

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

答案 33 :(得分:2)

要删除所有已停止的泊坞窗容器,请运行:-

$ 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>

答案 34 :(得分:2)

使用以下嵌套命令:

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

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

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

此命令删除所有容器。

答案 35 :(得分:1)

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

列出所有容器:

docker ps -a
docker 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)。

答案 36 :(得分:1)

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

showProgress();

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

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

答案 37 :(得分:1)

要删除指定容器

docker container rm container_id

如果容器正在运行,则必须先停止它,然后再将其删除

docker container stop container_id

此命令是删除所有现有容器

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

答案 38 :(得分:1)

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

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

    show  processlist;
  2. 删除所有容器

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

    docker rm $(docker ps -a -q)
    

答案 39 :(得分:1)

使用docker管理工具Portainer

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

它是用于docker的简单管理UI

如何部署管理员

使用以下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环境中使用。

答案 40 :(得分:1)

我发现下面的命令非常方便停止并删除所有容器。如果使用-f(强制)标志,则不需要使用其他命令显式停止,因为它会停止所有正在运行的容器:

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

答案 41 :(得分:1)

#!/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

答案 42 :(得分:1)

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

docker容器修剪

此命令将删除所有容器

为什么不使用清理整个docker系统

docker系统修剪

答案 43 :(得分: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文件,并可以执行以下操作:

enter image description here

答案 44 :(得分:0)

我正在使用以下命令删除已退出重新启动 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}')

答案 45 :(得分:0)

列出所有容器(仅ID)

docker ps -aq

停止所有正在运行的容器

docker stop $(docker ps -aq)

删除所有容器

docker rm $(docker ps -aq)

删除所有图像

docker rmi $(docker images -q)

答案 46 :(得分:0)

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

sudo python3.6 manage.py runserver

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

docker rm <cointainer_id>

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

docker rm <name>

或者您也可以使用:

docker container prune

您可以使用docker rm $(docker ps -aq -f status=exited) 参数删除任何不再引用的docker管理卷

-v

您还可以将docker rm -v $(docker ps -aq -f status=exited) --rm一起使用。当容器存在时,这将删除该容器和关联的文件。

答案 47 :(得分:0)

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

  1. docker container prune。此命令将删除所有当前无法使用的容器。您可以通过比较docker psdocker 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的操作系统中,您可以像上面的示例一样加入这些选项。

答案 48 :(得分:0)

在Windows(PowerShell)上,您可以执行以下操作:

  1. $ containers = docker ps -a -q
  2. foreach($ containers中的$ container){docker rm $ container -f}

答案 49 :(得分:0)

对于Linux安装,请确保使用sudo。此外,寻找数月和数周的图像也很不错:

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

答案 50 :(得分:0)

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

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

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

答案 51 :(得分:0)

docker rm -f $(docker ps -a -q)会做到这一点。它将停止容器并将其移除。

答案 52 :(得分:0)

我正在使用:

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

删除已退出的容器,并且:

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

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

答案 53 :(得分:0)

我使用以下内容的变体:

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)

答案 54 :(得分:0)

根据我的经验,你应该在移除容器之前先停止它们以避免容器,例如&#34;这个容器仍在运行&#34;那种错误,所以:

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

我在我的dotfiles中保留了一个别名,如:

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"

答案 55 :(得分:0)

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

#!/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

答案 56 :(得分:0)

这两行Bash会在删除之前按某些关键字过滤容器:

<?php
include_once "app/Mage.php";
Mage::init();
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$yourstring = array( 'ä', 'ö' , 'Ã' , 'ü' , '°' , '<short_description>' , '</short_description>    <full_description>' , '</full_description>' , '</weight>');
$newstring =  array( 'ä' , 'ö'  , 'ø'    , 'ü'  , '°'  , 'SHORT_DESCRIPTION'   , 'SHORT_DESCRIPTION'                          , 'DELETE'              , 'DELETE');

$_productCollection = Mage::getModel('catalog/product')
                    ->getCollection()
                    ->addAttributeToSelect('*')
                    ->load();

echo 'RUNNING SCRIPT...<br /><br /><br /><br />';               
for ($i = 0; $i <= 8; $i++) {
  echo 'Letter to fix: '.$newstring[$i].'<br />';
  foreach($_productCollection as $_product) {

    if (strpos($_product->getDescription(),$yourstring[$i]) !== false) {

      $newdescription = str_replace($yourstring[$i],$newstring[$i],$_product->getDescription());
      $_product->setDescription($newdescription);
      $_product->save();

      echo 'Updated product: '.$_product->getName().'<br />';
    }

  }
  echo '<br /><br />';
}
?>

来自this post

答案 57 :(得分:0)

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

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

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

答案 58 :(得分:0)

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

答案 59 :(得分:-2)

您可以使用某些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

答案 60 :(得分:-3)

我建议您先停止图片然后删除。

你可以这样:

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

答案 61 :(得分:-4)

您可以停止泊坞窗容器,一旦停止,您就可以移除容器。

停止容器:

$ docker stop“containerID” - 您还可以提及容器ID的前两个字母,它可以正常工作。

删除容器

$ docker rm“containerID” - 您还可以提及容器的前两个字母

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