繁体   English   中英

将Docker镜像从Gitlab的私有Docker注册表部署到Openshift

[英]Deploying Docker images from Gitlab's private Docker registry to Openshift

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

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

  • 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

这会在图像部分添加图像,但它无法拉动它Openshift还无法访问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

在创建的窗格的“事件”选项卡中。 这基本上杀死了我将预构建的图像部署到Openshift的计划。

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

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

回答我自己的问题:似乎Docker的发布(注册表守护进程)有一个错误,它以一种非常奇怪的方式表现出来

基本上,问题是:

  1. Registry是Apache反向代理的后盾
  2. 图像构建并从CI运行器推送到Gitlab的注册表,摘要SHA:1234 (当然是示例)
  3. 图像被导入到Openshift,它查询元数据和Docker Distribution声称摘要是SHA:ABCD ,您可以通过推送然后立即拉动来重现这一点,摘要应该是相同的两次,如链接中所述
  4. 当Openshift尝试实际拉动图像时,它会在上面出现可怕的“Manifest unknown”错误(因为它试图使用无效的摘要来获取图像,而不是由于它自己的错误)
  5. 除了完全不同的原因外,所有症状看起来与Docker v1 => Docker v2 API更改完全一样

我已经将我的Gitlab实例移动到另一台机器(它在Nginx后面)并且它没有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM