How to remove old Docker containers
这个问题与我是否应该关心过多的,没有运行的,码头集装箱有关?.
我想知道怎么把旧容器搬走。
也许有一个目录,在其中存储这些容器,我可以很容易地手动删除它们?
docker 1.13.x中有一个新功能,叫做docker container prune:
这将满足您的需要,并且应该以相同的方式在所有平台上工作。
还有一个Docker系统prune:
原始答案:
有人谈论过码头清理命令。您可以在这个票据上找到信息:实现一个"干净"命令(928)
在该命令可用之前,可以将docker命令与其他unix命令一起字符串化,以获得所需的内容。下面是一个如何清理几个星期前的旧容器的示例:
1 | $ 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那里得到的(在到期的地方获得学分):
1 | docker rm `docker ps --no-trunc -aq` |
将以优雅的方式移除所有容器。
由Bartosz Bilicki为Windows编写:
1 | FOR /f"tokens=*" %i IN ('docker ps -a -q') DO docker rm %i |
PowerShell:
1 | docker rm @(docker ps -aq) |
更新docker 1.13(2016年第4季度),信用到VONC(本线程的后面部分):
请参阅pr 26108和commit 86de7c0,其中引入了一些新命令,以帮助可视化Docker守护进程数据占用磁盘的空间,并允许轻松清除"不需要的"多余空间。
1 2 3 4 5 6 7 | 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 |
更新答案现在使用
先前的答案根据上面几个不同的提示,移除所有未运行容器的最优雅的方法似乎是:
-q 只打印容器ID(不带列标题)-f 允许您筛选打印的容器列表(在这种情况下,我们只筛选显示退出的容器)
官方方式是:
1 | docker rm `docker ps -aq` |
Docker维护人员已经指出,将没有用于此的命令-您可以编写如下命令:
We have discussed this before and prefer users to use the above line without having to add additional code to Docker.
与码头1.13(Q4),你现在有:2016年)
将删除所有未使用的
国有企业26108提交86de7c0和公关,这是引进一些新的命令,以帮助促进visualizing多少数据是以空间的守护进程的码头是容易清洁和让在线盘上"不考虑"。
1 2 3 4 5 6 7 | 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的评论
There is also
docker {container,image,volume,network} prune , which may be used to remove unused instances of just one type of object.
在提交了913e5cb码头,只有1.13)。
1 | docker container prune |
现在可以对
1 | docker rm $(docker ps -q -f status=exited) |
图像:
1 | docker rmi $(docker images -q -f"dangling=true") |
但是,如果没有匹配的容器,其中任何一个都会导致
下面是一个更清晰的脚本,添加到您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # 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的回答)提到了新的
2017年(最新更新)
1 | docker container prune |
本年(旧的方式)
删除所有的反应容器
1 | docker rm $(docker ps -a -q) |
删除所有容器(非反应和反应)
1 | docker rm -f $(docker ps -a -q) |
移除所有停止的容器:
1 | docker rm $(docker ps -a | grep Exited | awk '{print $1}') |
从Pauk960的评论中:
Since version 1.3.0 you can use filters with
docker ps , instead ofgrep Exited usedocker ps -a -f status=exited . And if you use-q with it you can get container IDs only instead of full output, no need to use awk for that.
如果不想删除所有容器,可以选择在使用
假设您已经开发了您的系统,现在它正在工作,但还剩下一些容器。要删除在该工作版本之前创建的容器。用
删除在其他容器之前创建的容器
1 | docker rm $(docker ps --before 9c49c11c8d21 -q) |
另一个例子。您的数据库已经在Docker容器上运行。您已经开发了在另一个容器上运行的应用程序,现在您有了许多不需要的容器。
删除在特定容器之后创建的容器
1 | docker rm $(docker ps --since a6ca4661ec7f -q) |
Docker在Ubuntu的
更新版本1.13(如搬运工:2017年一月发布的问题),你可以到下面的命令停止容器的清洁,未未卷,悬挂的图像和网络:
1 | docker system prune |
如果你想保险,你的代码是只读的容器有一个
1 | docker ps -aq -f status=exited | xargs docker rm |
同样的,如果你的东西你可以清洗上码头,摆脱unnamed未标记的图像,在这种方式:
1 | docker images -q --no-trunc -f dangling=true | xargs docker rmi |
这是我的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #!/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
首先,在试图移除容器之前停止运行容器
移除正在运行的容器1 | docker rm $(docker stop -t=1 $(docker ps -q)) |
你可以用
注意:尝试停止容器将导致错误:
Error: Impossible to remove a running container, please stop it first
移除所有容器
1 | docker rm $(docker ps -a -q) |
删除所有从Windows外壳的容器。
1 | FOR /f"tokens=*" %i IN ('docker ps -a -q') DO docker rm %i |
http:/ / / / github.com hardysimpson码头工人清理
码头工人清理
所有在一个小壳,这removes:
- 这是需要运行的容器超过一天……
- 图像不属于任何剩余的容器
打算作为一个crontab运行工作
特征
- 它会删除所有的图像
: - 如果图像有多天回购:引用它,它会删除所有的回购:除了一天运行的容器。实际上它是一个自然的"搬运工RMI。
- 许多错误消息将显示在屏幕上,你可以决定去或不
2>/dev/null - 学习的东西从码头-气相色谱法,和固定它的问题(它可以不删除的图像有多个回购:天)
用途:
1 | docker rm -f $(docker ps -a -q) |
它forcefully停止所有目前和removes显示容器。
删除所有的反应容器。
sudo docker rm $(sudo docker ps -a -q)
这将删除所有的容器由两个获得列表的所有集装箱码头PS a Q传递到码头和RM的南通。本不应该删除任何运行的容器,它想告诉你它不能删除一个运行的形象。
删除所有未标记的图像
现在你想去救老形象和清洁的空间。
sudo docker rmi $(sudo docker images -q --filter"dangling=true")
因此,我个人建议将此操作作为映像和容器部署脚本的一部分,只保留最新的n个容器和映像。我用与
1 2 3 4 5 6 7 | 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的
1 | docker rmi $(docker images -q | tail -n +4) |
与您的部署脚本(或本地)一起运行,以始终保持足够的图像,以便在不占用太多空间或将旧图像弄乱的情况下舒适地回滚。
就我个人而言,我在任何时候都只能在生产箱上保留一个容器,但如果您需要更多的容器,您可以对容器执行相同的操作:
1 | docker rm $(docker ps -aq | tail -n +4) |
最后,在我的简化示例中,我们一次只处理一个存储库,但是如果您有更多的存储库,您就可以用相同的想法变得更加复杂。比如说,我只想保留最后三张图片中的一些图片。我只需加入
1 | docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4) |
同样,同样的想法也适用于容器,但您现在已经了解了,所以我不再举出例子。
新的方法:气相色谱/码头Spotify播放比赛。
1 | docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc |
- 容器是在一exited超过8小时的情况。
- 图像是不属于任何剩余的容器后,在清除
它支持的环境设置
这是一个强迫多标签图像缺失研究
1 | FORCE_IMAGE_REMOVAL=1 |
集装箱强迫缺失研究
1 | FORCE_CONTAINER_REMOVAL=1 |
不包括从最近exited和图像的自动垃圾收集容器
1 | GRACE_PERIOD_SECONDS=86400 |
这也防止了在图像的背景去除,已经创造了优雅的_周期小于_秒秒前。
干运行
1 | DRY_RUN=1 |
卷上孤立的容器清洁清洁_ _体积= 1)
参考:码头-气相色谱法
旧的方式:
删除旧的,非运行容器
1 2 3 | docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm OR docker rm $(docker ps -a -q) |
删除所有的图像相关联的非经营集装箱码头
1 | docker images -q | xargs --no-run-if-empty docker rmi |
清理孤立码头是码头1.10.x卷或以上的版本
1 | docker volume ls -qf dangling=true | xargs -r docker volume rm |
基于时间
1 2 3 | 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 |
移除5个最旧的容器:
1 | docker rm `docker ps -aq | tail -n 5` |
查看还有多少个容器:
1 | docker ps -aq | wc -l |
删除所有Docker进程:
1 | docker rm $(docker ps -a -q) |
移除特定容器:
1 2 3 | $ docker ps -a (lists all old containers) $ docker rm container-Id |
可以使用以下命令删除退出的容器:
1 | docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1) |
以下是删除Docker上旧图像的完整要点:删除旧Docker容器和图像的要点。
1 2 3 4 5 6 7 8 9 10 | #!/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 |
的基本步骤以删除所有的容器和图像/停止
所有的集装箱清单
停止所有的运行容器
删除所有的容器
删除所有图像
注意:你必须先停止运行所有在你删除他们的容器。在去除图像也一,你必须停止和删除它的容器(s)的依赖。
我总是使用
当
你可以只删除停止容器。在开始的时候,他们停止所有的
然后你可以删除
尝试使用此命令清理容器和悬空图像。
1 | docker system prune -f |
在Ubuntu 14.04(Trusty Tahr)上:
1 | $ for CON in `docker ps -qa`; do docker rm $CON ; done |
这只是一个普通的bash命令,因此它应该与每个bash兼容的终端一起工作。
在不哭的情况下移除所有容器:
1 | sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f |
对于任何感兴趣的人,我从qkrijger中选取了这个例子,并将其转换为一个清晰的all(stop和remove all)。
1 | docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq` |
使用以下嵌套命令:
1 | $ sudo docker stop $(sudo docker ps -a -q) |
此命令停止所有正在运行的容器。
1 | $ sudo docker rm $(sudo docker ps -a -q) |
此命令删除所有容器。
删除从特定图像创建的所有容器:
1 | docker rm $(docker ps -a | awk '/myimage:mytag/{print $1}') |
这里是一个脚本运行和消除的时间超过2天exited容器创建的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/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 |
如果你想自动/定期清洁容器和删除图像和exited卷,是不是由正在运行的容器中使用的图像,你可以下载
我用这个,因为我们部署在生产时报在线多服务器多天,我真的想去到每一个服务器上(这将是清洁的疼痛)。
只是运行:
1 | 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分钟(或在默认情况下,但是你把它用长时间的延迟期权和_ = 1800)exited容器和清洁的形象。
更多细节:码头工人清理
1 | docker rm --force `docker ps -qa` |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/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 |
这里有一个一行程序,可以删除所有退出的容器。
如果你想删除所有的图像,你可以使用类似的东西。
删除指定容器
1 | docker container rm container_id |
如果容器正在运行,则必须先停止它,然后才能将其删除。
1 | docker container stop container_id |
此命令用于删除所有现有容器
1 | docker container rm $(docker container -a -q) |
这个过程包含两个步骤:(停止和删除)
停止使用的容器可以是任何运行精卫
1 | docker stop $(docker ps -a -q) |
删除所有的容器
1 | docker rm $(docker ps -a -q) |
单容器。
1 | docker rm container-ID |
使用Docker管理工具Portainer
我们可以使用此工具管理所有旧容器,不使用卷和图像
它是码头工人的简单管理用户界面
如何部署Portainer
使用以下docker命令部署portainer:
1 2 | $ 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 |
您只需要使用浏览器访问运行portiner的docker引擎的端口9000。
注意:
删除旧的集装箱码头是非常容易的。
所有容器的列表:
1 2 | docker ps -a docker ps (To list the running containers) |
一旦你点击
1 | docker rm container_id |
你将被删除沿容器中创建的图层(如果你用的是Ubuntu
我发现下面的命令对于停止和移除所有容器非常方便。如果使用
1 | docker rm -f $(docker ps -a -q) |
我使用以下变体:
1 | docker ps -a | grep 'cassandra.*Exited' | cut -d"" -f 1 |
第一部分列出了所有流程。
第二个选项只选择"cassandra"后面跟"exited"的选项。
第三,删除图像ID之后的所有测试,以便获得图像ID列表。
所以,
1 | docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d"" -f 1) |
一个linux的安装,确保您使用sudo。因此,它是很好的图片和寻找周月龄:
1 2 | sudo docker ps -a | grep 'weeks ago\|months ago' | \ awk '{print $1}' | xargs --no-run-if-empty sudo docker rm |
你可以使用辅助码头酒店github.com库http:////kartoza码头-助手。安装后,及时
这是一个简单的删除和使用由目前不运行的容器下面的别名,我通常在我的Mac到
1 | alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi" |
无论是invoked
这可能帮助(短脚本编译从以前的答案)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/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 |
我使用以下命令删除退出的Docker容器并重新启动Docker容器
1 2 3 4 | 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}') |
使用以下命令删除名为"无"的图像
1 | docker image rm --force $(docker image ls |grep none |awk '{print $3}') |
从我的经验,你应该避免在除尘容器停止他们的东西"这样的容器是安静运行的小错误",那么:
1 2 | sudo /usr/bin/docker ps -aq | awk '{print $1}' | \ xargs --no-run-if-empty bash -c 'sudo docker stop $@; sudo docker rm $@' bash |
我在我的dotfiles样文件别名:
1 2 | 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" |
我用:
1 | docker rm -v $(docker ps -a -q -f status=exited) |
集装箱和exited:删除查询
1 | docker rmi -f $(docker images | grep"<none>" | awk"{print \$3}") |
为了摆脱所有的untagged图像。
论文将两线的容器和过滤器的bash之前他们通过您的关键字:
1 2 3 | 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 |
从本邮件。
你可以使用一些UI应用程序删除的集装箱码头。
对不起,广告,但我总是用我自己的应用程序做同样的事情。你可以试试,如果你正在寻找一个简单的应用到图像或集装箱码头管理:http://github.com /代理/ amhub亚历克斯。
这是一个码头工人,UI Web应用程序是运行在一个集装箱码头。在安装它,你只需要在Invoke命令:
1 | docker run -d -p 80:80 -p 8000:8000 -e DOCKER=$(which docker) -v /var/run/docker.sock:/docker.sock alexagency/amhub |
我是你的第一个提示停止图像,然后删除。
你可以去样:
1 2 | $ docker stop $(docker ps -a) $ docker rm $(docker ps -a) |
你可以停止它是集装箱码头一旦停止,你可以清除容器。
停止位置的容器。
"美元containerid码头停止"你提到的第一个字母,所以容器的ID和它的作品。
把容器
"containerid Docker RM美元"了,你可以这样说的第一个集装箱。
如果你不让我们从命令停止/清除容器,米苏拉,LFS Docker sudo访问你的主机。