我在 Linux 机器上运行了一些 docker 容器,/docker/overlay2 文件夹的磁盘大小增长非常快。因此我们无法推送新镜像
当我检查 overlay2 内部时,我发现它包含非常旧的图层(2019 年 8 月)
我尝试使用以下命令清理 docker volume ls -qf dangling=true | xargs -r docker volume rm docker rm -v $(sudo docker ps -a -q -f status=exited) docker system prune
但回收了0B
还检查了https://stackoverflow.com/questions/46672001/is-it-safe-to-clean-docker-overlay2
https://docs.docker.com/config/pruning/
https://success.docker.com/article/error-message-no-space-left-on-device-in-default-machine
清洁它的最佳方法是什么?
docker 日志
Starting Oracle Net Listener.
启动 Oracle Database 11g Express Edition 实例。
等待数据库启动
SQL*Plus:2020 年 7 月 14 日星期二 05:04:23 发布 11.2.0.2.0 生产版本
版权所有 (c) 1982, 2011, Oracle。保留所有权利。
连接到:Oracle Database 11g Express Edition 版本 11.2.0.2.0 - 64 位生产
SQL> 与 Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64 位生产数据库断开连接,已启动 /opt/ion/platform/daemon/DM_DOCKER / 从 /opt/ion/platform/daemon/DM_DOCKER/mkvd118p1.lx 启动守护进程,正在等待端口 13000 bash:connect:网络无法访问 bash:/dev/tcp/localhost/13000:网络无法访问 Deamon 在端口 13000 上启动 / 正在执行:/startup/ansible_container_startup.sh 正在执行:/startup/cups_startup.sh 正在执行:/startup/samba_startup.sh 正在执行:/startup/start_check_mk_agent.sh
docker 差异 守护进程的错误响应:mkdir /docker/overlay2/f033daa6d065ff85484b54fcd9a7786f839917d180129ea8fed0f627ad776095-init/merged:设备上没有剩余空间
答案1
当 overlay2 太大时,大多数人的典型答案是运行清理,修剪已停止的容器和已取消标记(替换为较新的标记)的图像。这已经完成,docker prune
并且该命令还有其他选项可以修剪更多数据。有关清理此文件夹的更多详细信息,请参阅“清理 docker/overlay2/ 安全吗“。
如果问题是/var/lib/docker/containers
文件夹越来越大,我会怀疑日志写入了 stdout/stderr,并且有有多种方法来清理这些日志并防止将来出现过多的日志。
但是,对于此问题,如果启动容器时 overlay2 文件夹的大小迅速增加,则该容器很可能正在写入与该容器关联的读/写文件系统。对文件的每次修改都会触发对容器特定层的写入时复制。您可以诊断docker container diff
在特定容器 ID 上正在创建或修改哪些文件。在您的情况下,这种情况似乎发生得足够快以填满您的驱动器,因此您的机器可能没有能力调试或运行此容器,因此您可能被迫在具有更多容量的机器上调试它。
答案2
您可以使用docker image prune -a
它来删除无用的图像。