Docker Push Skipped foreign layer 的错误问题及解决方案

目录
  • 引言
  • 错误实例
  • 错误原因
  • 解决方法

引言

当Docker推送基于Windows镜像到私有仓库的时候会遇到Skipped foreign layer的问题。

错误实例

docker push 192.168.2.30:5000/iis
The push refers to a repository [192.168.2.30:5000/iis]
780cc29d7c04: Pushed
ce15af77227d: Pushed
357bccc34a53: Pushed
591455288d2b: Layer already exists
3543301c85cf: Skipped foreign layer
f358be10862c: Skipped foreign layer

上面可以看出,你可以推送自己构建的层,但是无法推送基础层。

3543301c85cf: Skipped foreign layer
f358be10862c: Skipped foreign layer

错误原因

原来是微软公司设置的发行策略,主要是法律及版权控制。

所以出现这种情况就是说无法推送外层,推送至私有仓库会被忽略,但是可以通过docker pull镜像进行下载。

解决方法

通过命令查询镜像包含的sha256的所有值

docker inspect --format "{{.RootFS.Layers}}" b5bc0a0e71bd
# [sha256:d6fdd6832d95a5f537e0e7d87f2613ea9741ad9c20438b9d5a2697a883c4cd96 sha256:19d90b2bc7a17e712bc5028ff2b9169219fde003c778add8e96fc55292b63a87 sha256:f51d63faee188bc69aedea10aa92bc559e890501ad5ba1f46ed1aeca13c2f306 sha256:ac9eea650efbb2a1ed765b833e26b9dd916bebb5f0bd1e773fd14f513ed3bae8 sha256:782ac0aa877ddc6712d079928557ee2165d47b90d86299c6550052ec7631bc17 sha256:d9fea57f1ce4be203fbfd1119bffe09cfb9dfcd80f1ede9ac0562a38452ef5e3 sha256:490c4a3bf5af6b76774d7f18d20d7740f520540a0d422a4273d896b62892e60f sha256:bf23eac85558d71971421f9967942da738f1ecf798ccfdd1bbefdb13c90b2011 sha256:898d69ea39196cc3c4992f81f8213e9ce0bc2bd950cc9c53dc819299146f1172 sha256:95d145091b600af63e5b54ecae0ea8c1fca42f956b2919a88d740593b11e3a73 sha256:b60a2e1a3d4b8de9beae01c10690fbe91712ccd7fb6d7b5f90c873ae0c42644f]

根据获取到的sha256值逐一查询文件夹

Select-String -Pattern "d6fdd6832d95a5f537e0e7d87f2613ea9741ad9c20438b9d5a2697a883c4cd96" -Path "C:\ProgramData\docker\image\windowsfilter\layerdb\sha256\*\diff"

# C:\ProgramData\docker\image\windowsfilter\layerdb\sha256\d6fdd6832d95a5f537e0e7d87f2613ea9741ad9c20438b9d5a2697a883c4cd96\diff:1:sha256:d6fdd6832d95a5f537e0e7d87f2613ea9741ad9c20438b9d5a2697a883c4cd96

# 执行后可能会遇到这个情况
# Select-String: Cannot find path 'C:\ProgramData\docker\image\windowsfilter\layerdb\sha256' because it does not exist.

# 如果遇到这个问题可以先手动打开这个文件夹C:\ProgramData\docker\image\windowsfilter\layerdb\sha256

打开文件夹中的descriptor.json文件进行如下操作

{
   "mediaType": "application/vnd.docker.image.rootfs.foreign.diff.tar.gzip",
   "size": 252691002,
   "digest": "sha256:bce2fbc256ea437a87dadac2f69aabd25bed4f56255549090056c1131fad0277",
   "urls": ["https://go.microsoft.com/fwlink/?linkid=837858"]
}
  1. 修改mediaType:去除foreign
  2. 删除urls结点。

最终得到一份如下的结果

{
   "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
   "size": 252691002,
   "digest": "sha256:bce2fbc256ea437a87dadac2f69aabd25bed4f56255549090056c1131fad0277"
}

小提示:如果不想查找可以一个一个文件夹修改descriptor.json。

经过以上处理以后,重启下Docker。之后就可以正常推送至私有仓库了。

到此这篇关于Docker Push Skipped foreign layer 的错误问题及解决方案的文章就介绍到这了,更多相关Docker Push Skipped foreign layer 的错误内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker push镜像失败解决方法

    Docker push镜像失败的问题. 以下是输入push自己的tomcat后出现了失败 [root@slave3 ~]# docker push lekkoliu/tomcat8:latest The push refers to a repository [docker.io/lekkoliu/tomcat8] cefee3f6c961: Preparing 82f021d9c2b9: Preparing 4f91f02b4e49: Preparing a4b3ce7e1d4a: Prepa

  • docker tag和docker push的使用详解

    docker tag 详解 docker tag 命令的使用,以及如何将本地的镜像推送到daocloud.io,这里不用docker hub作实验,是因为,docker hub网速不给力,容易推送失败. 使用docker tag使用镜像ID重命名 chenyangdeMacBook-Pro:~ chenyang$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 9 weeks a

  • 通过容器提交镜像DockerCommit及推送镜像DockerPush

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 查看镜像 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB 创建一个名为myubuntu的容器 [root@docker-test1 ~]# docker run -ti

  • Docker镜像推送(push)到Docker Hub的实现

    镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去.我们之前创建的镜像不符合Docker Hub的tag要求,因为 在Docker Hub注册的用户名是boonyadocker而不是boonya,所以需要docker tag进行修改,最后利用docker push命令推送镜像到公共仓库. Docker hub注册用户 到官网注册账号:https://hub.docker.com/ 在本地Linux登录docker: docker login 输入用户名密

  • Docker Push Skipped foreign layer 的错误问题及解决方案

    目录 引言 错误实例 错误原因 解决方法 引言 当Docker推送基于Windows镜像到私有仓库的时候会遇到Skipped foreign layer的问题. 错误实例 docker push 192.168.2.30:5000/iis The push refers to a repository [192.168.2.30:5000/iis] 780cc29d7c04: Pushed ce15af77227d: Pushed 357bccc34a53: Pushed 591455288d2

  • Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法

    Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法 发生现象: ubuntu15下,安装完Docker后,运行docker images 报错Cannot connect to the Docker daemon. Is the docker daemon running on this host? 如下图 图 原因分析: 目前我遇到这个问题是两个原因造成的,一个

  • Docker aufs存储驱动layer、diff、mnt目录的区别介绍

    Docker基础信息 首先,先查询Docker使用的后端存储.使用命令docker info,主要关注Storage Driver相关的部分. $ docker info ... Server Version: 1.12.6 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 84 Dirperm1 Supported: true ... 由上可见,Docker的版本是1.12.6

  • C语言编程中常见的五种错误及对应解决方案

    目录 1. 未初始化的变量 2. 数组越界 3. 字符串溢出 4. 重复释放内存 5. 使用无效的文件指针 前言: C 语言有时名声不太好,因为它不像近期的编程语言(比如 Rust)那样具有内存安全性.但是通过额外的代码,一些最常见和严重的 C 语言错误是可以避免的. 即使是最好的程序员也无法完全避免错误.这些错误可能会引入安全漏洞.导致程序崩溃或产生意外操作,具体影响要取决于程序的运行逻辑. 下文讲解了可能影响应用程序的五个错误以及避免它们的方法: 1. 未初始化的变量 程序启动时,系统会为其

  • Oracle ORA 07445 evaopn2()+128错误问题的解决方案

    问题描述 Plsql developer执行一段sql报错: 经查alert log详细报错信息为: ORA-07445: exception encountered: core dump [evaopn2()+128] [SIGSEGV] [Address not mapped to object] [0x000000000] [] [] 数据库版本 10.2.0.4.0 问题原因 复杂视图合并问题导致的oracle bug 解决方法 1.修改隐藏参数: alter system set "_

  • MAC上Mysql忘记Root密码或权限错误的快速解决方案

    最近一段时间都在倒腾mantis发现总是连接mysql出错,就随手修改了root权限,导致登录不上了. 下面给大家分享还原root权限和更改root密码的最便捷方法. 1:装mysql workbench .可视化界面直接操作. 2:苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务 3:进入终端 输入: cd /usr/local/mysql/bin/ 回车后 登录管理员权限 sudo su 回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe -

  • SQL Server成功与服务器建立连接但是在登录过程中发生错误的快速解决方案

    最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS下运行的时候,IIS crash.之前的连接是没问题的,后网上找了资料,根据牛人所说的方案解决了. 1. Exception message 已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确.) ---> System.ComponentModel.Win32Except

  • Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案

    遇到的问题 使用webpack打包vue后,将打包好的文件,发布到Tomcat上,访问成功,但是刷新后页面报404错. 在网上查找了一下,原来是HTML5 History 模式引发的问题,具体为什么,vue官方已经给出了解释,你可以看https://router.vuejs.org/zh-cn/essentials/history-mode.html 但是看完问题又来了,官方给出的解决方案中没有说tomcat下,怎么决解. 解决方案 根据官方给出的解决方案原理 你要在服务端增加一个覆盖所有情况的

随机推荐