GitLab CI запускает неожиданный docker: последнюю версию

#docker #gitlab #gitlab-ci-runner

#docker #gitlab #gitlab-ci-runner

Вопрос:

Я хотел использовать службу docker: dind в GitLab CI для создания образа docker, но программа продолжала запускать неправильную версию dind (19.03.8-dind) и показывать сообщение об ошибке ниже.

Error response from daemon: stat /var/lib/docker/tmp: no such file or directory

Недавно я обновил версию Docker с 18.06.1 по 19.03.12 на хост-сервере, на котором запущен мой gitlab-runner, и возникла проблема.

ПРИМЕЧАНИЕ: До этого обновления все работало хорошо. Я попытался понизить версию Docker до 18.06.1, на этот раз безуспешно. Программа GitLab Runner использует этот Docker в качестве исполнителя.

Ранее я использовал 19.03.8-dind в качестве демона docker. Я использовал docker system prune для удаления всех изображений на хосте, но ошибка все еще существовала.

Я следую за документами GitLab, чтобы настроить .gitlab-ci.yml.

Вот файл .gitlab-ci.yml

 stages:
  - build

docker build:
  stage: build
  # this is my customized docker image with golang:1.14 and docker:19.03.0
  image: go-docker:1.14-19.03.0 
  services:
    - name: docker:19.03.0-dind
  variables:
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: tcp://docker:2375
  tags:
    - linux
  before_script:
    - docker version
  script:
    - docker build ......

  

и вывод версии docker является

  $ docker version
 Client: Docker Engine - Community
  Version:           19.03.0
  API version:       1.40
  Go version:        go1.12.5
  Git commit:        aeac9490dc
  Built:             Wed Jul 17 18:11:50 2019
  OS/Arch:           linux/amd64
  Experimental:      false
 Server: Docker Engine - Community
  Engine:
   Version:          19.03.8
   API version:      1.40 (minimum version 1.12)
   Go version:       go1.12.17
   Git commit:       afacb8b7f0
   Built:            Wed Mar 11 01:30:32 2020
   OS/Arch:          linux/amd64
   Experimental:     false
  containerd:
   Version:          v1.2.13
   GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
  

Версия GitLab — 12.10.3, а GitLab-runner — 12.10.2.

Что я должен сделать, чтобы устранить проблему, все еще используя подход dind?

Ответ №1:

У меня возникли проблемы с установкой Gitlab Runner и использованием docker:dind сервиса на дешевой виртуальной машине стоимостью 5 долларов в Amazon Lightsail.

Это стало для меня актуальным в этом месяце, поскольку Gitlab сократил квоты на минуты выполнения на БЕСПЛАТНОМ плане с 2000 минут до 400.

После нескольких попыток установки я выяснил, что проблема заключалась в том, что Docker не работал в привилегированном режиме.

Полный сценарий установки выглядит следующим образом, вы можете запустить его на новой виртуальной машине, он включает ссылки с объяснением:

 
# 1. INSTALL GITLAB RUNNER 
# @see https://docs.gitlab.com/runner/install/linux-repository.html

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
export GITLAB_RUNNER_DISABLE_SKEL=true; sudo -E apt-get install gitlab-runner

# 2. INSTALL DOCKER
# @see https://docs.docker.com/engine/install/ubuntu/

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 3. REGISTER RUNNER WITH GITLAB.COM
# @see https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled

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"

  

После этого я смог запустить docker:dind службу без проблем, мне даже не нужно было указывать какие-либо специальные изображения, такие как docker:19.03.12-dind :

 image: docker

services:
  - docker:dind

build:
  stage: build
  script:
    - docker info

    ... your code needing docker here ...