2017-03-21 6 views
1

개인 Gitlab을 내 컴퓨터에서 호스팅하고 있습니다. 내 코드를 Gitlab에 저장하고 Dockerfile에서 Docker 이미지를 만들고 나서 Amazon ECR 레지스트리에 푸시하고 싶습니다.Gitlab-CI에서 Amazon AWS로 도커 이미지 작성 및 푸시 ECR

가 login-ecs.sh 스크립트가 단순히 eval $(/usr/local/bin/aws ecr get-login --region eu-central-1)를 실행
stages: 
    - build 

build_airflow: 
    stage: build 
    only: [master, develop] 
    image: gitlab/dind:latest 
    services: 
    - docker:dind 
    script: 
    - APP=airflow 
    - sh ./scripts/login-ecs.sh my_fancy_project 

, 로그인을해야하는 :

Flag --email has been deprecated, will be removed in 1.13. 
Cannot connect to the Docker daemon. Is the docker daemon running on this host? 
/dev/mapper/control: open failed: Operation not permitted 
Failure to communicate with kernel device-mapper driver. 
Check that device-mapper is available in the kernel. 
Command failed 
mount: permission denied 
Could not mount /sys/kernel/security. 
AppArmor detection and --privileged mode might break. 
mkdir: cannot create directory '/sys/fs/cgroup/name=systemd': Read-only file system 
mount: mount point /sys/fs/cgroup/name=systemd is not a directory 
ln: failed to create symbolic link '/sys/fs/cgroup/systemd/name=systemd': Read-only file system 

Timed out trying to connect to internal docker host. 

gitlab-CI 코드는 다음과 같습니다 : 그것은 오류가 발생하기 때문에 불행하게도,이 작동하지 않습니다 이미지를 ECR 도커 레지스트리 (소스 : https://blog.madisonhub.org/gitlab-ci-build-how-to-login-to-ecr/)로 보냅니다.

문제를 찾을 수 없으므로 도와 주시면 감사하겠습니다.

미리 감사드립니다.

PS : 로컬로 aws ecr get-login에서 명령을 실행하면 정상적으로 작동합니다. 그래서 그것은 gitlab을 가지고 뭔가를해야만합니다. 개인 레지스트리 로그인이 허용되는 일부 구성을 변경해야합니까?

답변

2

배경 : 당신은 기본적으로 기본적으로 gitlab-CI에 사용할 수없는 고정 표시기 컨테이너 내에서 고정 표시기 서버를 실행하려고
. 당신은 실행하여 고정 표시기 클라이언트와 서버의 상태를 확인할 수 있습니다 :

docker version

당신의 gitlab-CI 스크립트. 일반적으로 클라이언트와 서버가 올바르게 실행되는지 확인하는 것이 좋습니다.

당신이 고정 표시기 서버가이 오류가있어 이유입니다, 실행되고 있지 않은지이 실행 한 후 당신은 알 수 : Cannot connect to the Docker daemon. Is the docker daemon running on this host?

솔루션 :이 문제에 당신과 같은 문제를 해결하는 몇 가지 방법이 있습니다
여기에 Gitlab의 문서에 자세히 설명 : 우리는 당신의 Gitlab 러너 구성을 업데이트하고 특별 할 일을 사용하여 빌드를 실행 포함 docker-in-docker executor을 사용하고 해결
https://docs.gitlab.com/ce/ci/docker/using_docker_build.html

방법 cker-in-docker (dind) Docker Image입니다.

러너가 특권을 가진 모드로 실행되도록 업데이트해야합니다. 다음

[[runners]] 
    url = "https://gitlab.com/ci" 
    token = TOKEN 
    executor = "docker" 
    [runners.docker] 
    tls_verify = false 
    image = "docker:latest" 
    privileged = true 
    disable_cache = false 
    volumes = ["/cache"] 
    [runners.cache] 
    Insecure = false 

그리고 사용에게 docker:latest 이미지와 docker:dind 서비스를 사용 : 다음은 샘플 config.toml이다. 다음은 샘플 gitlab-ci.yaml 조각입니다 :

image: docker:latest 

# When using dind, it's wise to use the overlayfs driver for 
# improved performance. 
variables: 
    DOCKER_DRIVER: overlay 

services: 
- docker:dind 

before_script: 
- docker info 

build: 
    stage: build 
    script: 
    - docker version 
    - docker build -t my-docker-image . 
    - docker run my-docker-image /script/to/run/tests 

또 다른 방법은 별도의 고정 표시기 서버 설정이며, 환경 변수를 설정 DOCKER_TLS_VERIFYDOCKER_HOST은 그래서 당신의 고정 표시기 클라이언트는 서버에 안전하게 연결할 수 있습니다.
https://docs.docker.com/engine/security/https/

:이 지침을 따라야합니다

은 TLS를 활성화하려면