接上篇文章《jenkins构建Build step ‘Send build artifacts over SSH’ changed build result to UNSTABLE解决办法》中我们排查出是docker的overlay2中的文件占用空间特别大,就直接删除了该目录下所有7天前的文件,结果发现虽然jenkins虽然显示构建成功,蓝色图标,但是查看控制台日志发现如下报错:
ERROR: failed to solve: failed to prepare dzzq12pai98kw8byrq45ex7m7 as s7t6ejebmg1mye962qd1vk8ra: open /var/lib/docker/overlay2/pnfdyha3ye99q1y9rdtc1aufd/link: no such file or directory
也就是说构建其实还是失败了,原因就在于:
docker容器将容器缓存放在了overlay2这个目录下,保存着当前服务的状态等资源。将目录删除后,容器默认会先去查状态,然后再进行销毁、重启等操作。这时候,找不到目录,就停在了这里。jenkins构建自然也就失败了,解决办法如下:
这主要原因就是缓存镜像层的问题,要清除缓存镜像层,执行如下指令:
docker system prune -a
然后发现直接释放了54G的磁盘空间,如下图:
然后再去jenkins构建,发现overlay2就重建了,正常构建完成,完美,构建成功!
得出的教训就是如果想要清理docker内存,使用docker删除镜像的命令,除非删除挂载卷备份文件,其他不要使用rm去删文件,否则很容易出问题还找不到解决办法。