【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

### 回答1: 当您运行 `docker pull mysql:5.6` 命令时,Docker会自动从Docker Hub上下载 MySQL 5.6的镜像,并将其存储在本地的Docker镜像仓库中。默认情况下,Docker镜像存储在宿主机的 `/var/lib/docker` 目录下。 您可以使用 `docker images` 命令查看本地Docker镜像仓库中已经下载的镜像列表,可以看到您下载的MySQL 5.6镜像。 如果您想将该镜像导出到其他机器或者备份镜像,可以使用 `docker save` 命令将镜像保存为tar文件,例如: ``` docker save mysql:5.6 > mysql-5.6.tar ``` 该命令将在当前目录下创建一个名为 `mysql-5.6.tar` 的文件,其中包含了MySQL 5.6镜像的所有层,您可以将该文件移动到其他机器上,并使用 `docker load` 命令将其导入到该机器的Docker镜像仓库中,例如: ``` docker load < mysql-5.6.tar ``` 该命令将会将 `mysql-5.6.tar` 文件中的MySQL 5.6镜像导入到本地Docker镜像仓库中,您可以使用 `docker images` 命令查看该镜像是否已经导入成功。 ### 回答2: 在执行`docker pull mysql:5.6`命令后,Docker将会从Docker Hub下载MySQL 5.6镜像并将其存放在Docker守护进程所设置的镜像存储路径中。具体而言,Docker镜像存储在宿主机的文件系统中,而不是容器文件系统中。对于Linux系统,默认的存储路径是`/var/lib/docker`目录下的`/var/lib/docker/image/overlay2`文件夹。而Windows系统中的默认路径为`C:\ProgramData\docker`目录下的`C:\ProgramData\docker\image\windowsfilter`文件夹。 需要注意的是,Docker守护进程会自动管理镜像的存储,包括镜像的下载、删除和缓存等。因此,在执行`docker pull mysql:5.6`命令后,你可以通过`docker images`命令查看已下载的镜像列表,以及镜像在文件系统中的存储路径。 总之,执行`docker pull mysql:5.6`命令将会将MySQL 5.6镜像存储在Docker守护进程的镜像存储路径中,具体路径取决于宿主操作系统的设置。 ### 回答3: Docker pull命令用于从Docker Hub拉取镜像。在执行"docker pull mysql:5.6"命令时,Docker会从Docker Hub上找到并拉取MySQL 5.6的镜像。 这个镜像会存放在Docker镜像仓库中。Docker镜像仓库默认存放在操作系统的/var/lib/docker目录下,具体位置可能因Docker的安装方式和操作系统的不同而有所变化。 在/var/lib/docker目录中,镜像会分为多个文件夹存放。其中的image目录会包含所有已下载的镜像。对于"docker pull mysql:5.6"命令下载的MySQL 5.6镜像,会在/var/lib/docker/image目录下生成一个与镜像ID相关的文件夹。 在相关的文件夹中,会存在以下文件来存放MySQL 5.6镜像: - layer文件:这些文件包含了镜像的不同层次,用于构建完整的镜像文件系统。 - json文件:这个文件包含了关于镜像的元数据,如镜像的名称、标签、环境变量等信息。 总而言之,"docker pull mysql:5.6"命令会将MySQL 5.6镜像的文件存放在Docker镜像仓库中的image目录下的相关文件夹中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值