当我创建/调试docker镜像/容器时,docker似乎在我的系统上留下了各种各样的工件。 (在某一点上有48个图像限制)但是我最后一次看到那里有20-25张图像; docker images
。
所以最重要的问题是:
和元问题......我没有问过哪些问题需要?
答案 0 :(得分:35)
以下是我定期清除docker主机的方法:
杀死正在运行的容器:
docker kill $(docker ps -qa)
删除所有容器(及其关联的卷):
docker rm -v $(docker ps -qa)
删除所有图片:
docker rmi $(docker images -q)
仅删除未运行的容器。解析“已退出”字符串的“ps”输出:
docker ps -a | awk '/Exited/ {print $1}' | xargs docker rm -v
不完美......不要给容器命名为“已退出”: - )
Docker 1.9有一个新的卷命令,可用于清除旧卷
docker volume rm $(docker volume ls -qf dangling=true)
最新的docker社区版有一个新的“系统修剪”命令
docker system prune --volumes
清除未使用的网络,杀死已停止的容器,悬挂图像和任何未使用的卷。
答案 1 :(得分:23)
删除“悬空”图像也很有帮助
docker rmi $(docker images -f "dangling=true" -q)
答案 2 :(得分:15)
我还想通过添加到1.13.0版本的一些命令为此做出贡献:
$ docker system prune
$ docker container prune
$ docker image prune
$ docker volume prune
$ docker network prune
请参阅更改日志:1.13.0 (2017-01-18)
使用
docker system
和df
子命令添加新的prune
命令以进行系统资源管理,以及docker {container,image,volume,network} prune
子命令#26108#27525 /#27525
答案 3 :(得分:5)
我正在使用带有VirtualBox的docker-machine,在删除所有容器和所有图像后,docker VirtualBox映像仍然消耗了数GB的磁盘空间。
要清理磁盘空间,还可以删除并重新创建docker机器。 E.g:
docker-machine rm default
docker-machine create --driver virtualbox default
答案 4 :(得分:4)
<强>更新强> docker cli中有内置过滤器,可以正确显示符合特定条件的容器。这些bash函数来自其中一个核心维护者&#39; dotfiles:
dcleanup(){
docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}
del_stopped(){
local name=$1
local state=$(docker inspect --format "{{.State.Running}}" $name 2>/dev/null)
if [[ "$state" == "false" ]]; then
docker rm $name
fi
}
原始答案
我为自己创建的帮助脚本:
#!/bin/bash
# options:
# remove stopped containers and untagged images
# $ dkcleanup
# remove all stopped|running containers and untagged images
# $ dkcleanup --reset
# remove containers|images|tags matching {repository|image|repository\image|tag|image:tag}
# pattern and untagged images
# $ dkcleanup --purge {image}
# everything
# $ dkcleanup --nuclear
if [ "$1" == "--reset" ]; then
# Remove all containers regardless of state
docker rm -f $(docker ps -a -q) 2>/dev/null || echo "No more containers to remove."
elif [ "$1" == "--purge" ]; then
# Attempt to remove running containers that are using the images we're trying to purge first.
(docker rm -f $(docker ps -a | grep "$2/\|/$2 \| $2 \|:$2\|$2-\|$2:\|$2_" | awk '{print $1}') 2>/dev/null || echo "No containers using the \"$2\" image, continuing purge.") &&\
# Remove all images matching arg given after "--purge"
docker rmi $(docker images | grep "$2/\|/$2 \| $2 \|$2 \|$2-\|$2_" | awk '{print $3}') 2>/dev/null || echo "No images matching \"$2\" to purge."
else
# This alternate only removes "stopped" containers
docker rm -f $(docker ps -a | grep "Exited" | awk '{print $1}') 2>/dev/null || echo "No stopped containers to remove."
fi
if [ "$1" == "--nuclear" ]; then
docker rm -f $(docker ps -a -q) 2>/dev/null || echo "No more containers to remove."
docker rmi $(docker images -q) 2>/dev/null || echo "No more images to remove."
else
# Always remove untagged images
docker rmi $(docker images | grep "<none>" | awk '{print $3}') 2>/dev/null || echo "No untagged images to delete."
fi
exit 0
问题:
如何正确清理?
还没有正式的方法,只是帮助脚本和上面的函数。
因为我手动删除了更多的图像。啊?
您可能一直在删除构建在其他已成为&#34;未标记&#34;当你试图删除它们时。
我应该为主机分配多少磁盘空间?
取决于您计划使用的图像类型。知道多次运行500 mb图像并不能使用(500mb X容器数量)空间。容器重用相同的图像,只需添加在顶部运行时更改的内容。因此,从图像存储角度考虑,而不是关于存储的容器运行时。
下次重启后会运行守护进程真的重启吗?
默认情况下,主机重新启动时会停止它们。您需要与docker run --restart=True
一起运行,以便在主机重新启动时自动重新启动。
答案 5 :(得分:1)
有时你不会有状态,它只是空白。
这是我的版本:
docker rm -f $(docker ps -a | env -i grep -v Up | tail -n+2 | cut -d ' ' -f 1)