1. docker pull拉取镜像报错解决
-
docker pull报错:failed to register layer: symlink …/c477d78735a7d56972f63b922314847711d180a33cac41ef1f44d78ca24f643b/diff /var/lib/docker/overlay2/l/6V57XJWSIAOFAOB2CHECCJJ56L: no such file or director
-
报错原因:删除了/var/lib/docker/overlay2目录
- overlay2是docker使用的文件存储驱动, overlay2是分层存储, 每一层通过本层的md5值作为文件夹名来命名, md5相同可复用, 从而达到节省空间的目的
-
问题解决:
- 重启docker
systemctl restart docker
- 或者
service docker stop service docker start
- 重启docker
-
补充:重启docker或者删除/var/lib/docker再重启docker, 会自动创建新的overlay2文件夹目录存放所必须的文件
2. overlay2空间清理
-
进入overlay2目录
cd /var/lib/docker/overlay2
-
查询占用空间
sudo du -h -d 1
-
根据md5值查看是哪个容器
docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "0b0b3be771b04f66913ec95ee143b916fe4e8a4d7c5dcebf69a7e2f02108788f"
-
如果容器不需要,直接删除
-
如果容器需要, 清理容器日志
cd /var/lib/docker/containers cd 0b0b3be771b04f66913ec95ee143b916fe4e8a4d7c5dcebf69a7e2f02108788f ls rm -rf xxx.log
(如果没有docker权限, 可通过sudo ls /var/lib/docker查看)
-
通过脚本清理docker容器log
#!/bin/bash echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) # 先查看有哪些log for log in $logs do ls -lh $log done # 清理log for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========"
[参考文章]
[1]. 重启docker服务
[2]. 重启docker
[3]. 删除overlay2导致的docker build失败
created by shuaixio, 2024.07.24