skip to Main Content

I’m trying to create a fairly simple GitLab CI file to build out Docker images. Whenever I run the pipeline, I end up getting a Docker daemon connection issue. What can I do to properly build my image? Thanks!

GitLab CI:

image: docker:20.10.16

services:
  - docker:20.10.16-dind

variables:
  DOCKER_HOST: tcp://docker:2375

iac-build:
  stage: build
  extends: .iac
  rules:
    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
      when: always
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
      when: never
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: always
  script:
    - docker build -t testfirstimage .
  allow_failure: false

Error:

$ docker build -t testfirstimage .
failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial tcp 127.0.0.1:2375: connect: connection refused
Cleaning up project directory and file based variables
ERROR: Job failed: command terminated with exit code 1

2

Answers


    1. First thing I would check is if you already have something running on that local host – I’ve literally tried running a server on a local host port for hours and kept having it refused, only to find out that I had forgotten to terminate my connection to that port.

    2. If that isn’t the issue, I had this issue before and had to run this command to get it to work:

    
    concurrent = 1
    check_interval = 0
    
    [[runners]]
      name = "#####"
      url = "#####"
      token = "#####"
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "docker:latest"
        privileged = false
        disable_cache = false
        cache_dir = "cache"
        volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
      [runners.cache]
        Insecure = false
    
    

    I spent forever trying to figure it out and couldn’t get anything to work until I found out to add

    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
    

    I didn’t figure it out by magic though – props to this issues page: https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1986

    Hopefully that works.

    Login or Signup to reply.
  1. In order to get Docker-in-Docker working with GitLab CI, you will first need to decide if you want to use Docker-in-Docker with or without TLS. Then, change /etc/gitlab-runner/config.toml settings, and assign the DOCKER_TLS_CERTDIR in your .gitlab-ci.yml file. See the Docker-in-docker section of the GitLab docs.

    Docker-in-docker with TLS:

    # /etc/gitlab-runner/config.toml
    
    [[runners]]
      url = "https://gitlab.com/"
      token = TOKEN
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "docker:20.10.16"
        privileged = true
        disable_cache = false
        volumes = ["/certs/client", "/cache"]
      [runners.cache]
        [runners.cache.s3]
        [runners.cache.gcs]
    
    # .gitlab-ci.yml
    
    image: docker:20.10.16
    
    variables:
      DOCKER_TLS_CERTDIR: "/certs"
    
    services:
      - docker:20.10.16-dind
    
    before_script:
      - docker info
    
    # rest of .gitlab-ci.yml
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search