从Gitlab的私有Dockerregistry部署Docker镜像到Openshift

我正在开发一个基于Docker的项目。 该项目代码托pipe在一个私人的Gitlab安装, git.example.com 。 有了它,部署了Gitlab附带的Docker私有registry , registry.example.com

该项目有一个CI设置,最终build立Docker镜像并推送到registry,这部分按预期工作。 由于Gitlab + Dockerregistry尚不支持与同一个Git仓库相关的多个图像 ,因此我使用的标签解决方法将图像指定为:

  • registry.example.com/group/my.project:web
  • registry.example.com/group/my.project:app
  • 等等

我已经创build了一个用户,并将其附加到项目,通过它本地login,并试图拉上面的图像,按预期工作。

我已经添加了ImageStream块,如下所示:

 apiVersion: v1 kind: ImageStream metadata: name: web spec: tags: - from: kind: DockerImage name: registry.example.com/group/my.project:web name: latest 

这增加了图像部分中的图像,但它不能拉它Opensift还没有访问到Dockerregistry。 我添加了一个新的Docker秘密,如下所述,现在可以在Openshift中看到图像元数据,一切看起来都如预期。

但是,如果我添加一个部署configuration,如下所示:

 apiVersion: v1 kind: DeploymentConfig metadata: creationTimestamp: null labels: service: web name: web spec: replicas: 1 selector: service: web strategy: resources: { } template: metadata: creationTimestamp: null labels: service: web spec: containers: - name: web ports: - containerPort: 80 resources: { } restartPolicy: Always test: false triggers: - type: ConfigChange - type: ImageChange imageChangeParams: automatic: true containerNames: - web from: kind: ImageStreamTag name: 'web:latest' status: { } 

我不断收到错误:

 Failed to pull image "registry.example.com/group/my.project@sha256:3333022641e571d7e4dcae2953d35be8cdf9416b13967b99537c4e8f150f74e4": manifest unknown: manifest unknown 

在创build的吊舱的“事件”选项卡中。 这基本上杀死了我的计划,将预制图像部署到Openshift。

我知道Docker 1.9 – > 1.10不兼容,但是这是Openshift 1.4.1,图片是用Docker 1.13推送的,所以这应该不成问题。

我怎么才能开始debugging,有没有办法访问任何types的日志,这将解释发生了什么? 为什么ImageStream能够find它需要的一切(并访问我的registry),而不是DeploymentConfig?

为了回答我自己的问题:看起来Docker的Distribution(registry守护进程)有一个相当怪异的错误 。

基本上,问题是:

  1. registry位于Apache反向代理的后面
  2. 图像被构build并从CI运行器推送到Gitlab的registry,摘要SHA:1234 (当然是例子)
  3. 图像被导入到Openshift中,它查询元数据,Docker Distribution声明摘要是SHA:ABCD ,你可以通过按下然后再立即将其重现,摘要应该是相同的两次,如链接
  4. 当Openshift试图实际拉动图像时,它会得到上面的可怕的“Manitst unknown”错误(因为它试图使用无效的摘要来获取图像,而不是由于它自己的错误)
  5. 除了完全不同的原因之外,所有症状看起来都与Docker v1 => Docker v2 API更改完全相同

我已经把我的Gitlab实例移动到另一台机器上(它在Nginx的后面),它的工作没有问题。