Gitlab CI - docker: команда не найдена

Я пытаюсь создать образ докера в конвейере gitlab ci.

Однако он не может найти команду докера.

/ bin / bash: строка 69: докер: команда не найдена ОШИБКА: сбой задания: ошибка при выполнении удаленной команды: команда завершена ненулевым кодом выхода: ошибка при выполнении в контейнере Docker: 1

.gitlab-ci.yml

stages:
  - quality
  - test
  - build
  - deploy

image: node:8.11.3

services:
  - mongo
  - docker:dind

before_script:
- npm install

quality:
  stage: quality
  script:
  - npm run-script lint

test:
  stage: test
  script:
  - npm run-script test

build:
  stage: build
  script:
  - docker build -t server .

deploy:
  stage: deploy
  script:
  - echo "TODO deploy push docker image"

person Kay    schedule 05.07.2018    source источник
comment
Похоже, это советует не использовать DinD для общих целей CI jpetazzo.github.io/2015/09/03/ Можно попытаться выполнить этот процесс и вообще избежать проблем.   -  person Thymine    schedule 05.07.2018
comment
@Thymine предлагаемая альтернатива - смонтировать сокет докера при запуске внешнего контейнера, чего нельзя сделать в gitlab-ci.   -  person JulienD    schedule 29.07.2019


Ответы (5)


вам нужно выбрать образ, включая двоичные файлы докеров

image: gitlab/dind

services:
  - docker:dind
person Hieu Vo    schedule 05.10.2018

Проблема здесь в том, что образ докера узла не встраивает двоичные файлы докера.

Две возможности:

  • разделить этапы на две работы. Один использует образы узлов для качества и тестирования, другой - образ докера для сборки и развертывания. См. документацию по вакансиям.

  • создайте собственный образ докера, который включает как узел, так и докер, и используйте этот образ для создания своего репо.

Обратите внимание, что в обоих случаях вам нужно будет включить докер внутри вашего агента. См. документацию.

person Olivier Cazade    schedule 06.07.2018

дополнительно к Hieu Vo

image: docker:latest

stages:
  - build
  - release

services:
  - docker:dind
person madjardi    schedule 30.05.2019

У вас есть 2 варианта исправить это. Вам нужно будет отредактировать файл config.toml (он находится там, где вы установили бегун gitlab).

ОПЦИЯ 1

в config.toml:

privileged = true

в .gitlab-ci.yml:

myjob:
  stage: myjob
  image: docker:latest
  services:
    - docker:18.09.7-dind # older version that does not need demand TLS (see below)

ВАРИАНТ 2

в config.toml:

privileged = true
volumes = ["/certs/client", "/cache"]

в .gitlab-ci.yml:

myjob:
  stage: myjob
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2 # not sure if this is needed
    DOCKER_TLS_CERTDIR: "/certs"

ВАЖНО: ПОСЛЕ ВНЕСЕНИЯ ИЗМЕНЕНИЙ в config.toml ВАМ, вероятно, потребуется ПЕРЕЗАПУСК GITLAB RUNNER (который может варьироваться в зависимости от ОС) - Я ПЕРЕЗАПУСКАЛ MINE, НЕ УВЕРЕН, ЧТО БЫЛО, ЕСЛИ ВЫ НЕ ЗАПУСКАЛИ ЕГО!

Инструкции по перезапуску gitlab runner находятся здесь ... https://docs.gitlab.com/runner/commands/ ... в основном gitlab-runner restart но в Windows мне пришлось использовать службы Windows, чтобы перезапустить его

Почему эта проблема?

priviledged=true избавляется от докера: команда не найдена проблема

Однако docker:dind теперь требует сертификатов TLS (какими бы они ни были). Если вам нравится более старая версия докеров, вы можете использовать ВАРИАНТ 1. Если вам нужна последняя версия, вам нужно настроить Gitlab CLI, чтобы использовать их, что является ВАРИАНТОМ 2. J.E.S.U.S любит вас :)

Для получения дополнительной информации ... https://about.gitlab.com/blog/2019/07/31/docker-in-docker-with-docker-19-dot-03

person danday74    schedule 23.01.2021
comment
Привет! Один вопрос, я проверил свою папку gitlab / certs, и там ничего нет. Это ожидается? Я использую Gitlab.com напрямую, без собственного хоста, какой сертификат мне использовать? Заранее спасибо и всего наилучшего. - person Javier Guzmán; 25.03.2021
comment
Если я правильно помню ... gitlab runner запускается на вашем компьютере и создает папку сертификатов на вашем компьютере. Если вы настроили это не так, то я не уверен, насколько полезен этот ответ для вас. - person danday74; 25.03.2021
comment
Спасибо! Я так понял, но этого не происходит. Я уже пытался спросить на форуме Gitlab и даже поднял вопрос в трассировке, но ответов пока нет ... В любом случае, я продолжу копаться - person Javier Guzmán; 25.03.2021

Чтобы запускать команды Docker в заданиях CI / CD, необходимо настроить GitLab Runner, чтобы включить поддержку докеров.

Для получения дополнительной информации прочтите это руководство: https://www.javatuto.com/docker/solution-for-gitlab-ci-docker-command-not-found/

person Marwen Mselmi    schedule 03.02.2021