2016-07-21 2 views
6

개인 도커 레지스트리 (v2)에서 빌드 용 도커 이미지를 가져 오는 Docker 기반 Gitlab CI 러너를 만들고 싶습니다. Gitlab Runner가 로컬 레지스트리에서 이미지를 가져올 수 없도록 만들었습니다. /v1 API에서 가져 오기를 시도합니다. 다음과 같은 오류 메시지가 나타납니다.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

다음은 최소한의 예이며, docker-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

이 후 나는 새로 만든 도커 저장소에 간단한 받는다는 이미지를 밀어 :

[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 

난에서 테스트 프로젝트를 생성 이후

(나는 docker inspect 명령의 출력에서 ​​172.19.0.2 IP 주소를 가지고) Gitlab 및 간단한 .gitlab-ci.yml 파일 추가 :

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

stages: 
    - build 
    - test 
    - analyze 

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

을 그리고 빌드 후 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 주자 용기에 입력하면

, 나는 주어진 URL에서 레지스트리에 액세스 할 수 있습니다

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 주자가이 기능을 지원 최근, 참조 : 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" 
       } 
     } 
} 

내로 인증 키를 복사하여이 문제를 해결했습니다 내 컴퓨터에 복사하고이 인증 키를 Gitlab Runner의 고정 컨테이너에 복사했습니다.

0

Gitlab에서 어떤 버전의 도커를 사용합니까? 또한 v2 레지스트리의 경우 명령 줄 스위치로 안전하지 않은 레지스트리를 명시 적으로 허용하거나 인증서를 사용하여 레지스트리를 보호해야합니다.

그렇지 않으면 보안 예외가 발생하면 Docker가 v1 레지스트리로 폴백합니다.

+0

도커 버전은''1.11.2', 자세한 버전 정보는 http://pastebin.com/g9ma56ME입니다. 안전하지 않은 레지스트리는 다음과 같이 호스트 OS에 설정되어 있습니다 :'--insecure-registry registry : 5000 '. gitlab 러너가 컨테이너를 시작하는 방법을 모르겠다 - 어떤 도커 바이너리가 어떤 파일에서 런너 이미지 내부에 안전하지 않은 레지스트리를 설정해야하는지 등등. gitlab_runner 이미지에는 경로에 실행 가능한 도커가 없지만, 그래서 나는 어디서부터 시작해야할지 모른다. –