簡體   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