Syngularity
Syngularity

Reputation: 824

build and push docker images with GitLab CI

I would like to build and push docker images to my local nexus repo with GitLab CI

This is my current CI file:

image: docker:latest

services:
  - docker:dind

before_script:
  - docker info
  - docker login -u some_user -p nexus-rfit some_host

stages:
  - build

build-deploy-ubuntu-image:
  stage: build
  script:
    - docker build -t some_host/dev-image:ubuntu ./ubuntu/
    - docker push some_host/dev-image:ubuntu
  only:
    - master
  when: manual

I also have a job for an alpine docker image, but when I want to run any of it it's failing with the following error:

Checking out 13102ac4 as master...
Skipping Git submodules setup
$ docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ERROR: Job failed: exit code 1

So technically the docker daemon in the image isn't running, but I have no idea why.

Upvotes: 5

Views: 5655

Answers (1)

Alfageme
Alfageme

Reputation: 2145

GitLab folks have a reference on their docs about using docker-build inside docker-based jobs: https://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor. Since you seem to have everything in place (i.e. the right image for the job and the additional docker:dind service), it's most likely a runner-config issue.

If you look at the second step in the docs:

  1. Register GitLab Runner from the command line to use docker and privileged mode:

    [...]

    Notice that it's using the privileged mode to start the build and service containers. If you want to use docker-in-docker mode, you always have to use privileged = true in your Docker containers.

Probably you're using a runner that was not configured in privileged mode and hence can't properly run the docker daemon inside. You can directly edit the /etc/gitlab-runner/config.toml on your registered runner to add that option.

(Also, read on the section on the docs for some more info about the performance related to the storage driver you choose/your runner supports when using dind)

Upvotes: 7

Related Questions