如何在卷和容器中手动删除文件后强制Docker释放存储空间?

You*_*iga 5 docker

我的存储空间问题很少.我删除了一些大文件,如日志文件(找到大文件的unix后).

问题是手动删除一些Docker文件(在/ var/lib/docker/...中).删除Docker文件后,我可以看到剩下的空间不会改变.Docker不会释放空间.

我重新启动服务Docker,问题仍然存在.

如何强制Docker从(devicemapper,volume,images,...)释放空间?

Ric*_*nco 13

使用最新版本的Docker,您可以看到用于的空间:

docker system df

并修剪它:

docker system prune

上面的命令结合了对卷,容器,网络和映像存在的prune命令:

docker volume prune

docker container prune

docker image prune

docker network prune

所有这些都有一个--help option.

-O-

在旧版本的Docker上我运行了脚本:

#!/bin/bash

# Remove dead containers (and their volumes)
docker ps -f status=dead --format '{{ .ID }}' | xargs -r docker rm -v
# Remove dangling volumes
docker volume ls -qf dangling=true | xargs -r docker volume rm
# Remove untagged ("<none>") images
docker images --digests --format '{{.Repository}}:{{.Tag}}@{{.Digest}}' | sed -rne 's/([^>]):<none>@/\1@/p' | xargs -r docker rmi
# Remove dangling images
docker images -qf dangling=true | xargs -r docker rmi
# Remove temporary files
rm -f /var/lib/docker/tmp/*
Run Code Online (Sandbox Code Playgroud)


Ano*_*oop 5

这取决于您使用的 docker 版本,如果您使用的是 >1.13,那么您可以使用:

docker system df
Run Code Online (Sandbox Code Playgroud)

docker system df -v
Run Code Online (Sandbox Code Playgroud)

^^这些将显示正在使用磁盘空间的位置。

您可以使用prune命令进行清理:

docker system prune -af
Run Code Online (Sandbox Code Playgroud)

^^ 这会修剪一切并且是最具破坏性的。或者您可以使用docker image prunedocker volume prune等。


k0p*_*kus 3

Docker 清理工作几乎不存在,基本上是你自己负责完成的。正如这篇博文中指出的那样,有一些方法可以做到这一点,但我宁愿使用第三方脚本,例如:docker-clean来清理 docker 留下的一些混乱。