#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 ...