Bootstrap

【linux】docker pull拉取镜像报错 + overlay2空间清理

 

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或者删除/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

;