2016-07-21 5 views
6

Я хотел бы создать Docker на основе Gitlab CI runner, который вытаскивает изображения докеров для сборки из частного реестра Docker (v2). Я не могу заставить Gitlab Runner вытащить изображение из локального реестра, он пытается получить что-то из API /v1. Я получаю следующее сообщение об ошибке:Gitlab CI не может вытащить изображение из частного реестра докеров

ERROR: Build failed: Error while pulling image: Get http://registry:5000/v1/repositories/maven/images : dial tcp: lookup registry on 127.0.1.1:53: no such host

Вот минимальный пример, используя Докер-Compose и веб-браузер.

У меня есть следующий docker-compose.yml файл:

version: "2" 

services: 
    gitlab: 
    image: gitlab/gitlab-ce 
    ports: 
     - "22:22" 
     - "8080:80" 
    links: 
     - registry:registry 

    gitlab_runner: 
    image: gitlab/gitlab-runner 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
    links: 
     - registry:registry 
     - gitlab:gitlab 

    registry: 
    image: registry:2 

После первого входа в систему Gitlab, зарегистрировать бегуна в экземпляр Gitlab:

[email protected]:/# gitlab-runner register 
Running in system-mode.        

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci): 
http://192.168.61.237:8080/ci   
Please enter the gitlab-ci token for this runner: 
tE_1RKnwkfj2HfHCcrZW 
Please enter the gitlab-ci description for this runner: 
[130d08732613]: docker 
Please enter the gitlab-ci tags for this runner (comma separated): 

Registering runner... succeeded      runner=tE_1RKnw 
Please enter the executor: docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, virtualbox, docker+machine: 
docker 
Please enter the default Docker image (eg. ruby:2.1): 
maven:latest 
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

После этого, я вижу бегун Gitlab в моей Gitlab пример:

Gitlab Runner in Gitlab instance

После этого я нажимаю простой Maven изображение в моем недавно созданном хранилище Докера:

[email protected]:~/$ docker tag maven:3-jdk-7 172.19.0.2:5000/maven:3-jdk7 
[email protected]:~/$ docker push 172.19.0.2:5000/maven:3-jdk7 
The push refers to a repository [172.19.0.2:5000/maven] 
79ab7e0adb89: Pushed 
f831784a6a81: Pushed 
b5fc1e09eaa7: Pushed 
446c0d4b63e5: Pushed 
338cb8e0e9ed: Pushed 
d1c800db26c7: Pushed 
42755cf4ee95: Pushed 
3-jdk7: digest: sha256:135e7324ccfc7a360c7641ae20719b068f257647231d037960ae5c4ead0c3771 size: 1794 

(я получил 172.19.0.2 IP-адрес из выхода A docker inspect командования)

После этого я создать тестовый проект в Gitlab и добавить простой .gitlab-ci.yml файл:

image: registry:5000/maven:3-jdk-7 

stages: 
    - build 
    - test 
    - analyze 

maven_build: 
    stage: build 
    script: 
    - "mvn -version" 

и после того, строй Gitlab дает ошибку в видели в начале поста.

Если я вхожу в запущенном gitlab-бегун контейнера, я могу получить доступ к реестру по данному адресу:

[email protected]:~/$ docker exec -it comptest_gitlab_runner_1 bash 
[email protected]:/# curl http://registry:5000/v2/maven/tags/list 
{"name":"maven","tags":["3-jdk7"]} 
[email protected]:/# exit 
exit 
[email protected]:~/$ 

Но ошибке все то же:

Gitlab Runner in Gitlab instance

ли вам есть идея, как заставить gitlab-runner использовать v2 api частного реестра?

+0

Вы пытались потянуть изображение из бегуна? Может быть, с «внешним» IP? Как насчет вытаскивания изображения с хоста? – Martin

+0

@mgansler Если я вхожу в образ gitlab_runner ('docker exec -it comptest_gitlab_runner_1 bash'), то нет команды докера. Но реестр наблюдается, потому что я могу использовать HTTP-API реестра с завитком. –

ответ

2

Следующая Gitlab и Gitlan Runners поддерживают это, см: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#using-a-private-container-registry

На старой Gitlab я решил эту проблему с копированием ключа аутентификации в ~/.docker/config.json

{ 
     "auths": { 
       "my.docker.registry.url": { 
         "auth": "dmlsbW9zLm5hZ3k6VGZWNTM2WmhC" 
       } 
     } 
} 

Я вошел в этот контейнер из моего компьютер и скопировал этот ключ auth в контейнер докеров Gitlab Runner.

0

Какую версию докера вы используете на Gitlab? Также для реестра v2 необходимо явно разрешить небезопасный реестр с помощью командной строки или защитить свой реестр с помощью сертификата.

В противном случае отказ докера в реестре v1, если он получит исключение безопасности.

+0

Версия для докеров - '1.11.2', подробная информация о версии находится здесь: http://pastebin.com/g9ma56ME Реестр небезопасности установлен в ОС хоста следующим образом:' --insecure-registry registry: 5000 '. Я не знаю, что бегун gitlab запускает контейнеры, в которых используется двоичный файл докеры, в каком файле я должен установить небезопасный реестр внутри образа бегуна и т. Д. Изображение gitlab_runner не имеет исполняемого файла докеры на пути, поэтому я не знаю, с чего начать. –