我在谷歌云上有一个基本服务器,它每 30 分钟通过 cron 运行一次 docker 容器。我注意到 docker 命令停止工作,我收到一条错误消息
docker: Error response from daemon: no space left on device.
然后我注意到,即使我尝试通过键入
cd path/
在 bash 中自动完成,我也收到了这个错误。并点击 tab
.我发现存储可能有问题,所以我尝试了 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%,还是太高了。
最佳答案
在运行不需要保持停止状态的容器时,最好使用 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/
关于docker - 由于 docker/cron,设备上没有剩余空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56381961/