我在Google云上有一台基本服务器,该服务器每30分钟通过cron运行一次docker容器。我注意到docker命令停止工作,并显示一条错误消息
docker: Error response from daemon: no space left on device.
然后我注意到即使尝试通过输入cd path/
并单击tab
进行bash自动完成时,也遇到了此错误。我发现存储空间可能有问题,所以尝试了df -h
,它显示了这一点:
Filesystem Size Used Avail Use% Mounted on
udev 860M 0 860M 0% /dev
tmpfs 175M 19M 157M 11% /run
/dev/sda1 9.7G 9.7G 0 100% /
tmpfs 871M 0 871M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 871M 0 871M 0% /sys/fs/cgroup
tmpfs 175M 0 175M 0% /run/user/1001
您可以看到/ dev / sda1由于某种原因已满100%。为什么会发生这种情况,我该如何解决?
我注意到有数千个退出的Docker容器,因此我使用以下命令将其删除:
docker rm -v $(docker ps -a -q -f status=exited)
现在存储使用率为61%,仍然太高。
答案 0 :(得分:1)
在运行不需要保持停止状态的容器时,最好使用docker run --rm ...
自动清除停止的容器。
如果容器生成了在docker volume ls
中可见的卷,则在不再需要数据后,您可能希望清除这些卷。在运行--rm
标志的情况下,匿名卷(显示为长的唯一ID)将被自动删除。
Docker还提供了以下命令:
docker system prune
,您可以自动清理图像,容器,网络甚至卷。请注意,在运行命令之前,尤其是在自动化之前,您应该花些时间了解此命令的功能。编写此命令的脚本时,可以使用-f
标志绕过提示。
在进行修剪之前,您可以检查:
docker system df
查看每个组件使用了多少磁盘,每个组件都有自己的修剪命令,例如docker container prune
和docker volume prune
,如果您只想清洁一个区域。
有关prune命令的更多详细信息,请参见:https://docs.docker.com/engine/reference/commandline/system_prune/