尝试对docker push <IMAGE>私有 Docker 映像注册表执行操作时,收到错误提示清单无效
随着错误,它给出 some [DEPRECATION NOTICE],这也可能是失败的原因。
注意:在收到此错误并且docker push命令失败后。(ci/cd因为它没有完成这项工作,我猜它正在抛出exit 1),当我在注册表中查看时,图像存在。
在同一个 docker 注册表中,还有其他图像存在。他们也经历了相同的 CI/CD 管道。但对他们来说,没有检测到问题。问题是否有可能源于
Dockerfile?(虽然它以前可以工作,但使用相同的 Dockerfile)
我已经仔细检查过,我正在推送的图像version(例如<IMAGE_NAME>:0.0.1-5e90df92ed140-development:)不在注册表中。
我还提到了与此相关的多个问题和问题,并交叉检查了
fsLayers作为history注意:我们使用的是JFrog Artifactory 版本到 6.12.2
Docker 版本(在我的本地机器上,它也失败了。带有相同的消息):
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf5
Built: Thu Oct 17 23:44:48 2019
OS/Arch: darwin/amd64
Experimental: false …Run Code Online (Sandbox Code Playgroud) 我按照本指南设置了Docker v2注册表,充当Docker Hub映像的本地代理缓存.我的Docker守护程序配置了指向同一注册表实例的两个--insecure-registry和--registry-mirror选项.
拉动图像时,通过将它们缓存到本地商店,它可以正常工作.
问题是当我尝试将图像推送到这样的本地私有注册表时,我得到一个奇怪的UNSUPPORTED错误.注册表日志说:
time="2015-11-09T13:20:22Z" level=error msg="response completed with error" err.code=UNSUPPORTED err.message="The operation is unsupported." go.version=go1.4.3 http.request.host="my.registry.io:5000" http.request.id=b1faccb3-f592-4790-bbba-00ebb3a3bfc1 http.request.method=POST http.request.remoteaddr="192.168.0.4:57608" http.request.uri="/v2/mygroup/myimage/blobs/uploads/" http.request.useragent="docker/1.9.0 go/go1.4.2 git-commit/76d6bc9 kernel/3.16.0-4-amd64 os/linux arch/amd64" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.035918ms http.response.status=405 http.response.written=78 instance.id=79970ec3-c38e-4ebf-9e83-c3890668b122 vars.name="mygroup/myimage" version=v2.2.0
Run Code Online (Sandbox Code Playgroud)
如果我在注册表上禁用代理设置,则推送工作正常.我是否遗漏了配置上的内容,或者只是私有注册表不能同时充当代理缓存?
在docker中,如何显示当前登录的当前注册表信息?我安装了docker,如果我现在做docker push,它在哪里发送我的图片?
我花了30多分钟从Google和Docker文档中搜索这些信息,但找不到它,所以我认为它应该有自己的问题.
Docker引擎中的"Docker注册表"是否类似于Nexus/Artifactory?它们之间有什么相似之处和不同之处?如果我们已经拥有Nexus,我们可以使用它作为Docker注册表的替代方案并将其插入Docker引擎吗?
有人可以帮我清除这个吗?
我正在编写一个docker注册表api包装器,用于从一个私有注册表中提取图像并将它们推送到另一个私有注册表.
首先根据文档我需要拉出清单和图层image:tag.在 Puling An Image之后,我已经成功下载了特定image:tag和清单的所有图层.
下面推的图像,我遵循的步骤:
POST /v2/<name>/blobs/uploads/(获取UUID即Location标题)HEAD /v2/<name>/blobs/<digest> (检查注册表中是否已存在)PUT /v2/<name>/blobs/uploads/<uuid>?digest=<digest>(Monolithic Upload)对我来说不清楚的是:
UUID我推送的每个单独层是唯一的还是对所有层重用的(例如,我是否需要为每个层运行一个新的POST,UUID然后在尝试上传之前获取新的?).要使上传被视为完成,客户端必须在上传端点上使用摘要参数提交PUT请求
但是,正如我所提到的,我正在使用单片上传,它使用的是PUT与完成上传部分中显示的相同的请求.所以通过单片上传,我还可以同时完成上传吗?
问题
当我完成上述所有步骤时,我BLOB_UNKNOWN 在上传摘要时收到错误,例如
{"errors:"[{"code":"BLOB_UNKNOWN","message":"blob unknown to registry","detail":{"digest":}},...]}
根据文档,在推送清单时会产生此错误,并且清单中的其中一个层未知:
如果注册表未知一个或多个图层,则返回BLOB_UNKNOWN错误.错误响应的详细信息字段将具有标识丢失的blob的摘要字段.每个未知blob都会返回一个错误.响应格式如下:
令我困惑的是
现在我将使用docker客户端,但是我没有在线找到任何包装器示例,看看它是如何被拉出来的.据推测,我错过了一些逻辑或误解了文档,但我不确定我哪里出错了?
我刚刚安装了 docker,然后尝试运行hello-world程序。我的服务器在公司代理后面。因此,我根据 docker 手册在名为 的文件中设置了代理环境变量/etc/systemd/system/docker.service.d/http-proxy.conf:
[Service]
Environment="HTTP_PROXY=http://username:password@server:8080"
Environment="HTTPS_PROXY=https://username:password@server:8080"
Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com"
Run Code Online (Sandbox Code Playgroud)
但是,在运行时$ sudo docker run hello-world。我收到错误
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: first record does not look like a TLS handshake.
See 'docker run --help'.
Run Code Online (Sandbox Code Playgroud)
这是docker version:
Client: Docker Engine - Community
Version: 19.03.9
API version: 1.40
Go version: go1.13.10
Git commit: 9d988398e7
Built: Fri May 15 00:25:34 2020
OS/Arch: linux/amd64
Experimental: false
Server: …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 CI/CD 过程利用 BUILDKIT for Docker 的缓存/拉取系统。但它没有按预期工作。
我创建了一个虚拟的本地示例(但同样的情况也发生在我的 CI 系统 - AWS CodePipeline,以及 DockerHub 和 AWS ECR 中)。Dockerfile:
# base image
FROM python:3.7-slim
# set working directory
WORKDIR /usr/src/app
# add and install requirements
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip $PIP_PROXY install --no-cache-dir --compile -r requirements.txt
RUN echo 123
# add app
COPY ./run_test.py /usr/src/app/run_test.py
# run server
CMD ["python", "run_test.py"]
Run Code Online (Sandbox Code Playgroud)
run_test.py 实际上并不有趣,但这里是代码以防万一:
import requests
import time
while True:
time.sleep(1)
print(requests)
Run Code Online (Sandbox Code Playgroud)
您还需要requirements.txt在同一文件夹中创建一个空文件。
事先,我导出了两个环境变量:
export …Run Code Online (Sandbox Code Playgroud) 我有一个 GitLab CI 作业,它将同一应用程序的多个架构构建到 docker 映像中。我想将它们推送到 DockerHub,而无需标记每个图像。这样我就可以将它们添加到清单中,而不会用一堆重复的图像污染标签目录。
例如——来自这组标签:
对此:
这是可能的吗?我现在制作了这段代码来推高标签并制作清单,但我不确定如何调整它。
- >
for arch in $DEPLOY_ARCHS; do
NEW_IMAGE_NAME="${REPO_PATH}:${REVISION}-${arch}${TAG_EXTRAS}"
docker pull "${INDEV_IMAGE_NAME}-${arch}${TAG_EXTRAS}"
docker tag "${INDEV_IMAGE_NAME}-${arch}${TAG_EXTRAS}" "${NEW_IMAGE_NAME}"
docker push "${NEW_IMAGE_NAME}" # I want to be able to push to the manifest without tagging
export IMAGES="$IMAGES ${NEW_IMAGE_NAME}"
done
- docker manifest create ${REPO_PATH}:${REVISION}${TAG_EXTRAS} ${IMAGES}
- docker manifest push --purge ${REPO_PATH}:${REVISION}${TAG_EXTRAS}
Run Code Online (Sandbox Code Playgroud)
这是可能的吗?
continuous-integration containers docker dockerhub docker-registry
如果您曾经在https://hub.docker.com上仔细浏览过 docker 镜像,您可能曾经剖析过在某个标签内组成感兴趣的镜像的所有命令。
很好,但是当您单击命令的特定行时,您可能会看到这种“翻译”命令:
我在这里可能是错的,因为我不是 Docker 专家,但这似乎是SHA-256摘要,它指的是...... Hub 内的其他内容。
我的问题是;知道 SHA 值 ( ) 后,如何找到它到底指的是什么3a7bff4e139bcacc5831fd70a035c130a91b5da001dd91c08b2acd635c7064e8?
docker-registry ×10
docker ×9
dockerhub ×2
artifactory ×1
azure ×1
caching ×1
containers ×1
docker-api ×1
dockerfile ×1
nexus ×1