从Gitlab部署Docker映像';s私有Docker注册表到Openshift

从Gitlab部署Docker映像';s私有Docker注册表到Openshift,docker,openshift,gitlab,kubernetes,Docker,Openshift,Gitlab,Kubernetes,我在做一个基于Docker的项目。项目代码托管在一个私有的Gitlab安装中,git.example.com。使用它,可以部署注册表.example.com 该项目有一个CI设置,它最终构建Docker映像并推送到注册表,这部分按预期工作。正如所述,我正在使用标记解决方案,将图像指定为: registry.example.com/group/my.project:web registry.example.com/group/my.project:app 等等 我已经创建了一个用户,并将其附加

我在做一个基于Docker的项目。项目代码托管在一个私有的Gitlab安装中,
git.example.com
。使用它,可以部署注册表.example.com

该项目有一个CI设置,它最终构建Docker映像并推送到注册表,这部分按预期工作。正如所述,我正在使用标记解决方案,将图像指定为:

  • registry.example.com/group/my.project:web
  • registry.example.com/group/my.project:app
  • 等等
我已经创建了一个用户,并将其附加到项目中,通过它在本地登录,并尝试拉取上面的图像,效果如预期

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

apiVersion: v1
kind: ImageStream
metadata:
    name: web
spec:
    tags:
    -
        from:
            kind: DockerImage
            name: registry.example.com/group/my.project:web
        name: latest
这会将图像添加到Images部分,但无法将其拉入Openshift,因为Openshift尚未访问Docker注册表。如前所述,我添加了一个新的Docker机密,现在可以在Openshift中看到图像元数据,一切都如预期的那样

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

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
在创建的pod的事件选项卡中。这基本上扼杀了我将预构建映像部署到Openshift的计划

我知道Docker 1.9->1.10不兼容,但这是Openshift 1.4.1,图像是用Docker 1.13推送的,所以应该不会有问题


我如何开始调试这个,有没有一种方法可以访问任何类型的日志来解释发生了什么?为什么ImageStream能够找到它所需要的一切(并访问我的注册表),而不能找到DeploymentConfig?

回答我自己的问题:Docker的发行版(注册表守护程序)似乎已经完成了

基本上,问题是:

  • 注册表位于Apache反向代理之后
  • 映像将被构建并从CI runner推送到Gitlab的注册表digest
    SHA:1234
    (当然是示例)
  • 图像被导入到Openshift,它查询元数据,Docker发行版声称摘要是
    SHA:ABCD
    ,您可以通过按下然后立即拉出来复制此摘要,正如链接中所解释的,两次摘要应该是相同的
  • 当Openshift试图实际提取图像时,它将得到上面可怕的“Manifest unknown”错误(因为它试图使用无效摘要提取图像,而不是因为它自己的错误)
  • 除了完全不同的原因外,所有症状都与Docker v1=>Docker v2 API更改完全相同

  • 此后,我将我的Gitlab实例移动到了另一台机器上(它在Nginx后面),并且它可以正常工作。

    回答我自己的问题:Docker的发行版(注册表守护程序)似乎有问题

    基本上,问题是:

  • 注册表位于Apache反向代理之后
  • 映像将被构建并从CI runner推送到Gitlab的注册表digest
    SHA:1234
    (当然是示例)
  • 图像被导入到Openshift,它查询元数据,Docker发行版声称摘要是
    SHA:ABCD
    ,您可以通过按下然后立即拉出来复制此摘要,正如链接中所解释的,两次摘要应该是相同的
  • 当Openshift试图实际提取图像时,它将得到上面可怕的“Manifest unknown”错误(因为它试图使用无效摘要提取图像,而不是因为它自己的错误)
  • 除了完全不同的原因外,所有症状都与Docker v1=>Docker v2 API更改完全相同
  • 我已经将我的Gitlab实例移动到了另一台机器上(它在Nginx后面),并且它可以正常工作