Gitlab docker in docker build시 tcp lookup docker on no such host 에러

Runner를 shell이 아니라 Docker 안에서 Docker를 빌드하기 위해 docker로 등록하는 경우 발생한 에러입니다. 에러 메시지는 아래와 같이 나오는데요.

error during connect: Post http://docker:2375/v1.40/auth: dial tcp: lookup docker on 8.8.8.8:53: no such host
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: exit code 1

위 에러는 Runner를 생성할 때 아래와 같은 기본 명령으로 생성하는 경우에 발생한 문제입니다.

sudo gitlab-runner register --url https://gitlab.example.com/ --registration-token GR134894~~~~

문제해결을 위해 이미 등록된 runner config를 수정하려면 아래 파일을 수정해야합니다.

/etc/gitlab-runner/config.toml

[[runners]]
  name = "gitlab.example.com"
  url = "https://gitlab.example.com/"
  token = "yinWhxe------"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:19.03.12"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

위 설정에 보면 privileged = false 로 설정되어 있는데 이를 true로 변경해주면 됩니다. 변경된 설정을 적용하기 위해서는 gitlab-runner를 restart 해주어야 합니다.

sudo gitlab-runner restart

이런 문제를 미리 방지하기 위해서는 아래와 같이 –docker-privileged 옵션을 적용해서 runner를 생성하면 됩니다.

sudo gitlab-runner register -n \
  --url https://gitlab.com/ \
  --registration-token REGISTRATION_TOKEN \
  --executor docker \
  --description "My Docker Runner" \
  --docker-image "docker:19.03.12" \
  --docker-privileged \
  --docker-volumes "/certs/client"

참고

Leave a Reply