【Docker系列】push镜像报错问题&解决方案

这篇具有很好参考价值的文章主要介绍了【Docker系列】push镜像报错问题&解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Docker系列】push镜像报错问题&解决方案,Docker,云原生,容器,docker

1 问题描述

docker push 报这个错,unknown blob

详细报错内容:

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
The push refers to repository [192.******/*******/*************]
3b3341e9d039: Pushing [==================================================>]  12.97MB
abbeacff5fa5: Pushing [==================================================>]   7.68kB
685c55d58372: Pushing [==================================================>]  4.096kB
6d451941e7b1: Pushing   2.56kB
0348644449af: Pushing [===========================>                       ]   15.8MB/28.67MB
4b56765b6b5e: Pushing [==================================================>]  7.168kB
65bc30a63225: Pushing [==================================================>]   5.12kB
6be1b85707bc: Pushing [==================================================>]   2.56kB
1eb3501d2fb4: Waiting 
81d1bb17d85e: Waiting 
5079ade1f5c9: Waiting 
9386262d7a74: Waiting 
unknown blob

2 解决思路

2.1 定位问题

当 Docker push 时出现 "unknown blob" 错误时,这通常表示 Docker 镜像中缺少某些层或 blob。

有几种可能的解决方案:

  1. 修改daemon.json文件
  2. 检查 Docker 镜像是否存在
  3. 检查 Dockerfile 是否正确
  4. 清除 Docker 缓存
  5. 重新构建 Docker 镜像
  6. 检查 Docker 镜像层

2.2 方案一

如果是使用的域名推送,可以修改daemon.json文件,改为内网push,增加insecure-registries 

{
  "insecure-registries": ["my.insecure.registry:5000"]
}

如果你需要连接到多个不安全的 Docker Registry,请将它们添加到 `insecure-registries` 列表中。

【Docker系列】push镜像报错问题&解决方案,Docker,云原生,容器,docker

拓展 

insecure-registries 是 Docker daemon 配置选项之一,允许 Docker daemon 在不使用 TLS 或其他安全协议的情况下连接到指定的 Docker Registry。

默认情况下,Docker daemon 仅允许使用 TLS 或其他安全协议连接到 Docker Registry。

注意,使用 insecure-registries 可能会存在安全风险。建议仅在测试或开发环境中使用 insecure-registries 选项,不要将其用于生产环境。 

2.3 方案二

1. 检查 Docker 镜像是否存在

使用以下命令查看 Docker 镜像列表:

docker images

```

如果你的镜像不在列表中,请尝试重新构建镜像。

2.检查 Dockerfile 是否正确

确保 Dockerfile 中的每个指令都能成功运行,并且没有拼写错误或语法错误。

3.清除 Docker 缓存

可以尝试清除 Docker 缓存并重新构建 Docker 镜像。可以使用以下命令清除 Docker 缓存:

这将清除所有未使用的 Docker 镜像、容器和卷。

docker system prune --all --force --volume

4.重新构建 Docker 镜像

如果清除 Docker 缓存后问题仍然存在,可以尝试重新构建 Docker 镜像:

下面命令会将重新构建 Docker 镜像。

docker build -t <image_name> .

4.检查 Docker 镜像层

可以使用以下命令列出 Docker 镜像的所有层:

docker inspect <image_name>

如果尝试了上述解决方案后仍然无法解决问题,可能需要进一步检查 Docker 镜像及其层的状态。

可以使用以下命令列出 Docker 镜像的所有层和它们所对应的 blob 的摘要:

docker inspect <image_name> | grep -i sha256

其中 <image_name> 是要检查的 Docker 镜像的名称或 ID。

输出将包含每个层的 SHA256 摘要,例如:

"RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:0a8f4a1d34f9d295a0bcf9a7f8c11a4d9a4e5f5b2f2a6b8e6e6b8f8a496f16d5",
                "sha256:0b2c3e1e6f0e3e0d8b7f1c8db67de5a2a3fbc0e3c0d2bb8f1a7b1d2d9a7c4e01",
                "sha256:2b8c7e2fdee9f0d5e6b9a6f5b0c1dd3a309c3826c7c4a31b66c9956179c7f9e5",
                "sha256:9a32d4f6c0c8d1b3b0bca1d6b9e5f6c8e4f75d9b7d4bdc1e2f7f3d0c86c63cbe",
                "sha256:faa9aef3a5244a9a1a406f3df7d1b4a1b7979c0f8d86c533d5ed1e3c8b08c5e4"
            ]
        }

如果某个层或 blob 缺失,您将看不到其对应的 SHA256 摘要。如果确实缺少某些层或 blob,则可以尝试重新构建 Docker 镜像或从另一个来源获取缺少的层或 blob。

如果您使用的是 Docker Registry,可以尝试使用 Registry 的 garbage-collect 命令清除 Registry 中的孤立层和 blob。例如:

docker exec <registry_container_id> bin/registry garbage-collect /etc/docker/registry/config.yml

其中 <registry_container_id> 是 Registry 容器的 ID。garbage-collect 命令将清除 Registry 中的孤立层和 blob,并重新构建索引。

如果有256

如果使用的是 Docker 19.03 或更高版本,则 Docker 会默认启用基于 SHA256 的镜像摘要算法。在这种情况下,您可以使用以下命令列出 Docker 镜像的所有层和它们所对应的 SHA256 摘要:

docker inspect <image_name> --format='{{json .RootFS.Layers}}' | jq -r '.[]'

其中 <image_name> 是您要检查的 Docker 镜像的名称或 ID。

这将输出 Docker 镜像的所有层的 SHA256 摘要,例如:

sha256:0a8f4a1d34f9d295a0bcf9a7f8c11a4d9a4e5f5b2f2a6b8e6e6b8f8a496f16d5
sha256:0b2c3e1e6f0e3e0d8b7f1c8db67de5a2a3fbc0e3c0d2bb8f1a7b1d2d9a7c4e01
sha256:2b8c7e2fdee9f0d5e6b9a6f5b0c1dd3a309c3826c7c4a31b66c9956179c7f9e5
sha256:9a32d4f6c0c8d1b3b0bca1d6b9e5f6c8e4f75d9b7d4bdc1e2f7f3d0c86c63cbe
sha256:faa9aef3a5244a9a1a406f3df7d1b4a1b7979c0f8d86c533d5ed1e3c8b08c5e4

如果某个层缺失,将看不到其对应的 SHA256 摘要。如果确实缺少某些层,则可以尝试重新构建 Docker 镜像或从另一个来源获取缺少的层。文章来源地址https://www.toymoban.com/news/detail-559474.html

到了这里,关于【Docker系列】push镜像报错问题&解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于【Git】push失败与使用小乌龟(TortoiseGit)时的一些报错解决方案

    原因.小乌龟没有设置git路径,解决如下 将红框标注的地址改为自己的git安装地址即可。 原因是设置了全局代理没有清除 如果依然出现该错误 重新push即可。 一些刚学习vs的用户们可能会不熟悉界面,打开了一些不该打开的应用,vs自带的git即使如此,他会和自身安装的GIt与

    2024年02月08日
    浏览(65)
  • Docker 删除镜像文件以及解决删除报错image is being used by stopped container 的问题

    1.使用命令查看所有镜像 2.根据ID删除需要删除的镜像 3.如果删除时出现了image is being used by stopped container的错误就先使用一下命令再执行删除指令: 4.再次执行成功

    2024年02月05日
    浏览(47)
  • Docker无法拉取镜像解决方案

    安装docker之后,有时候我们拉取镜像会出现速度慢,或者不成功 报错代码:   原因: 在等待报头时超时,请求在等待连接时被取消(客户端)。Docker 默认的源为国外官方源,下载速度较慢,可改为国内镜像源。 解决办法: 使用阿里云镜像加速器 1.打开网址阿里云登录 - 欢迎

    2024年02月13日
    浏览(72)
  • git提交到远程仓库 Git HEAD detached from origin(冲突解决后无法正常push) 问题的解决方案

    目录 一、Git提交代码的流程 二、将本地项目发布到gitee上 将本地代码库与远程代码库相关联 强制把远程仓库代码拉取到到当前分支上面。ps:如果仓库为空这一步可以跳过 三、git提交代码--修改提交的地址 四、获取密钥 Git HEAD detached from origin(冲突解决后无法正常push) 问题

    2024年02月03日
    浏览(70)
  • Docker拉取jdk8镜像失败解决方案

    Docker拉取jdk8失败解决方案 最近使用docker部署demo时,需要配置java环境变量,拉取jdk8时,拉取失败,本文记录解决方案: 拉取镜像时,使用的命令是: docker pull java:8 出现了以下情况 : 解决方案: 使用以下拉取命令即可: docker pull openjava:8 使用命令 docker images 查看镜像,可

    2024年02月11日
    浏览(50)
  • 解决docker 拉取镜像报错问题——Using default tag: latest Error response from daemon: Get “https://registry-(全)

       如下图,docker无法拉取镜像。 (以下操作均要在root条件下进行) 1. 我们需要检查daemon.json文件并对其进行编辑。 提醒一下使用国内镜像加速的 装docker默认没有这个文件的,需要自己创建,问题不大。 使用阿里云的镜像加速就行。 {\\\"registry-mirrors\\\": [\\\"https://registry.docker-cn

    2024年01月17日
    浏览(56)
  • 【问题解决】Git报错:failed to push some refs to xxxxx

    To https://xxxxxxxxxxxx.git ! [rejected] master - master (fetch first) error: failed to push some refs to ‘https://xxxxxxxx.git’ hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hin

    2023年04月15日
    浏览(59)
  • 解决:使用git提交代码到github时,git push总是报错的问题

      github在2021年8月13日的时候修改了认证方式,不能使用账户登录的方式去push代码等等操作,而是使用生成仓库的个人密钥去push代码等操作。所以如果使用的是gitee的话,通过账户密码登录的方式是可以正常提交的,而如果是使用GitHub的话,那么在最后一步的git push时是会报

    2024年04月13日
    浏览(70)
  • docker镜像push到仓库

    镜像可以很方便直接 push 到 docker 的公共仓库或阿里云仓库 1、登录docker hub创建自己的仓库地址: https://hub.docker.com/repository/create 创建时,仓库名称要与镜像名称对应 登录docker仓库,输入密码 将镜像打成标签 将标签上传镜像仓库 下载自己的镜像 修改镜像名称

    2024年02月16日
    浏览(33)
  • docker拉取镜像报错unexpected EOF的解决方法

    报错内容如下: 产生unexpected EOF报错的原因可能是镜像分层中有部分镜像层丢失导致,其他服务器可以正常拉取,唯独这台不可拉取。 解决方法,将这台不能拉取的机器中关于这个镜像所有关联的镜像、容器全部删除,然后从可以正常拉取的服务器上docker save一下,然后上传

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包