Сбой сборки Docker - Гитлаб CI с GKE.Не удается подключиться к демону Docker по адресу tcp: // localhost: 2375.Работает ли демон Docker? - PullRequest
0 голосов
/ 14 ноября 2018

Я интегрировал Google Kubernetes Engine с моим репозиторием Gitlab и создал кластер из gitlab. Сейчас я пытаюсь создать свой образ докера, используя gitlab-ci, и перенести его в Реестр контейнеров Google. Но я продолжаю получать эту ошибку:

Running with gitlab-runner 11.2.0 (35e8515d)
  on gitlab runner vm instance 4e6e33ed
Using Docker executor with image docker:latest ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
Using docker image     sha256:edbe3f3ad406799b528fe6633c5553725860566b638cdc252e0520010436869f for docker:dind ...
Waiting for services to be up and running...

*** WARNING: Service runner-4e6e33ed-project-8016623-concurrent-0-docker-0 probably didn't start properly.

Health check error:
ContainerStart: Error response from daemon: Cannot link to a non running container: /runner-4e6e33ed-project-8016623-concurrent-0-docker-0 AS /runner-4e6e33ed-project-8016623-concurrent-0-docker-0-wait-for-service/service (executor_docker.go:1305:0s)

Service container logs:
2018-11-14T13:02:37.917684152Z mount: permission denied (are you root?)
2018-11-14T13:02:37.917743944Z Could not mount /sys/kernel/security.
2018-11-14T13:02:37.917747902Z AppArmor detection and --privileged mode might break.
2018-11-14T13:02:37.917750733Z mount: permission denied (are you root?)

*********

Pulling docker image docker:latest ...
Using docker image sha256:062267097b77e3ecf374b437e93fefe2bbb2897da989f930e4750752ddfc822a for docker:latest ...
Running on runner-4e6e33ed-project-8016623-concurrent-0 via gitlab-runners..

###
# Running before_script commands here
###

# Error Comes on Docker build command
Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running?
ERROR: Job failed: exit code 1

Это мой gitlab-ci.yml.

services:
- docker:dind

before_script:
- apk update && apk upgrade && apk add --no-cache bash openssh

variables:
DOCKER_DRIVER: overlay2

stages:
- build

build:
stage: build
image: docker:latest
variables:
    DOCKER_HOST: tcp://localhost:2375
before_script:
# Pre-requisites required to install google cloud sdk on gitlab runner
- export COMMIT_SHA=$(echo $CI_COMMIT_SHA | cut -c1-8)
- apk update
- apk upgrade
- apk add --update ca-certificates
- apk add --update -t deps curl
- apk del --purge deps
- rm /var/cache/apk/*
script:
    # Build our image using docker
    - docker build -t $GCP_PROJECT_ID/$CI_PROJECT_NAME:$COMMIT_SHA .

    # Write our GCP service account private key into a file
    - echo $GCLOUD_SERVICE_KEY | base64 -d > ${HOME}/gcloud-service-key.json

    # Download and install Google Cloud SDK
    - wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
    - tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true

    # Update gcloud components
    - google-cloud-sdk/bin/gcloud --quiet components update

    # Give access to gcloud project
    - google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json || die "unable to authenticate service account for gcloud"

    # Get current projects credentials to access it
    - google-cloud-sdk/bin/gcloud container clusters get-credentials gitlab-kube --zone cluster-zone --project project-id

    # Configure container registry to push using docker
    - docker login -u _json_key --password-stdin https://gcr.io < ${HOME}/gcloud-service-key.json

    # Push the image using docker
    - docker push $GCP_PROJECT_ID/$CI_PROJECT_NAME:$COMMIT_SHA

Образ докера строится на локальном компьютере. Также я видел в различных постах обновление файла config.toml, но у меня его нет в моем проекте. Куда добавить этот файл?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Вы должны просто установить privilege = true в конфигурационном файле gitlab-runner и перезапустить его.

0 голосов
/ 19 ноября 2018

Прежде всего: вам не нужно gcloud для отправки ваших изображений в GCP.Аутентификация по сервисной учетной записи (как у вас) достаточно.(см .: https://cloud.google.com/container-registry/docs/advanced-authentication#json_key_file)

Однако ... Если вы действительно хотите использовать Gloud SDK, используйте изображение google/gcloud-sdk вместо docker в вашей работе (Docker уже присутствует внутри google/gcloud-sdk image)

Далее, чтобы использовать Docker deamon, вам нужно указать хорошую конечную точку. Вы используете сервис docker:dind, поэтому Docker Host будет tcp://docker:2375/ (docker - имя хоставашей службы)

Наконец, вашему бегуну понадобится режим «привилегированный» (для выполнения DIND). (См .: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-executor)

Это быстрый пример (извините, не тестировался), для этого:

stages:
- build

build:
  stage: build
  image: google/cloud-sdk
  services:
  - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_HOST: tcp://docker:2375/
  before-script:
    - echo $GCLOUD_SERVICE_KEY | base64 -d > ${HOME}/gcloud-service-key.json
  script:
    - docker build -t $GCP_PROJECT_ID/$CI_PROJECT_NAME:$COMMIT_SHA .
    - docker login -u _json_key --password-stdin https://gcr.io < ${HOME}/gcloud-service-key.json
    - docker push $GCP_PROJECT_ID/$CI_PROJECT_NAME:$COMMIT_SHA
...