docker 一键删除所有退出的 container remove exited container
petermac: peter $ docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b4a32f863de5 32bit/ubuntu:16.04 "bash" 44 seconds ago Exited (127) 18 seconds ago hungry_golick 07b4c6f89903 32bit/ubuntu:16.04 "bash" 52 seconds ago Exited (0) 48 seconds ago recursing_noyce c64a19d2817e ubuntu "bash" About a minute ago Exited (0) About a minute ago sharp_pasteur 7484b7ee0963 centos:7 "/bin/bash" About a minute ago Exited (0) About a minute ago wizardly_payne d403bd192646 centos:7 "bash" 42 minutes ago Exited (0) 42 minutes ago hadoop11 826135304c7c centos:7 "bash" 42 minutes ago Exited (0) 42 minutes ago hadoop10
经常用docker做开发的, 可能会像上面一样, 或者有几百条挂掉的container.
当然, 你可以用统计一下自己有多少个挂掉的container :
petermac: peter $ docker container ps -f status=exited | wc -l 7
我算是有洁癖, 所以上面7个都是刚刚做出了的, 为了演示, 如果你超过100, 恭喜你, 你是一个有丰富经验的docker人才.
好了废话不说, 这是正题: 如何一键删除所有退出的container?
petermac: peter $ docker container ps -f status=exited | cut -f 1 -d " " | tail -n +2 | xargs docker container rm b4a32f863de5 07b4c6f89903 c64a19d2817e 7484b7ee0963 d403bd192646 826135304c7c petermac: peter $ docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
简单分析一下句子:
> cut -f 1 -d " " : 取得第一个字段(就是container ID), -d " " 代表分隔符号为空白
> tail -n +2 : 跳过第一行(2-1), 从第2行开始(+2 注意别忘记+), 第一行是说明字段的头文件
CONTAINER ID IMAGE ... 等等
> xargs : 从stdin取得字符串(通过pipe | 每行取一次), 执行后面的语法, 把字符串贴在后面执行.
例如:
echo ls | xargs docker image
等于
docker image ls
浙公网安备 33010602011771号