2016-07-21 24 views
6

Ich möchte einen Docker-basierten Gitlab CI-Runner erstellen, der die Docker-Images für den Build von einer privaten Docker Registry (v2) abruft. Ich kann den Gitlab Runner nicht dazu bringen, das Image von einer lokalen Registry zu holen, es versucht etwas von einer API zu bekommen. Ich erhalte die folgende Fehlermeldung:Gitlab CI kann kein Bild aus der privaten Docker-Registry ziehen

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

hier ein minimales Beispiel, Docker-compose und einen Web-Browser.

Ich habe folgende docker-compose.yml Datei:

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 

Nach dem ersten Gitlab Login, melde ich mich an den Läufer in die Gitlab Beispiel:

[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! 

Danach habe ich die Gitlab Läufer sehen in meinem Gitlab Beispiel:

Gitlab Runner in Gitlab instance

Danach schiebe ich ein einfaches Maven Bild zu meinen neu erstellten Docker Repository:

[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 

(ich die 172.19.0.2 IP-Adresse aus dem Ausgang des docker inspect Befehl bekam)

Danach ich ein Testprojekt in der erstellen Gitlab und fügen Sie eine einfache .gitlab-ci.yml Datei:

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

stages: 
    - build 
    - test 
    - analyze 

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

und nach dem Build der Gitlab gibt den Fehler in am Anfang der Post gesehen.

Wenn ich in den laufenden Gitlab-runner Behälter geben, kann ich die Registrierung unter der angegebenen URL:

[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]:~/$ 

Aber der Fehler immer noch die gleichen:

Gitlab Runner in Gitlab instance

Haben Sie hast du eine idee wie man den gitlab-runner zwingt das v2 api des privaten registers zu benutzen?

+0

Haben Sie versucht, das Bild aus dem Läufer zu ziehen? Vielleicht mit der "externen" IP? Was ist mit dem Bild vom Host? – Martin

+0

@mgansler Wenn ich in das gitlab_runner Bild eingebe ('docker exec -it comptest_gitlab_runner_1 bash') gibt es keinen docker Befehl. Aber die Registrierung wird gesehen, weil ich die HTTP-API der Registrierung mit curl verwenden kann. –

Antwort

2

Neuere Gitlab und Gitlan Runners diese Unterstützung finden Sie unter: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#using-a-private-container-registry

Auf älteren Gitlab habe ich gelöst diese mit Kopieren eines Auth-Schlüssel in ~/.docker/config.json

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

ich in diesen Behälter eingeloggt habe von meinem Computer und kopierte diesen Authentifizierungsschlüssel in den Andock-Container des Gitlab Runner.

0

Welche Version von Docker laufen auf Gitlab? Auch für eine v2-Registrierung müssen Sie die unsichere Registrierung explizit mit einem Befehlszeilenschalter zulassen oder Ihre Registrierung mithilfe eines Zertifikats sichern.

Andernfalls Docker Fallback auf die v1-Registrierung, wenn es eine Sicherheitsausnahme erhält.

+0

Die Docker-Version ist '1.11.2', detaillierte Versionsinformationen finden Sie hier: http://pastebin.com/g9ma56ME Die unsichere Registrierung wird im Host-Betriebssystem wie folgt festgelegt:' --insecure-registry register: 5000 '. Ich weiß nicht, dass der Gitlab-Runner wie die Container startet - welcher Docker-Binary verwendet wird, in welcher Datei sollte ich die unsichere Registry im Runner-Image setzen, etc. Das gitlab_runner-Image hat kein Docker-Executable auf dem Pfad. also weiß ich nicht, wo ich anfangen soll. –