Сбой сборки GitlabCI, docker.sock: запись: неработающий канал

#docker #gitlab-ci #gitlab-ci-runner #rancher

#docker #gitlab-ci #gitlab-ci-runner #владелец ранчо

Вопрос:

Я пытался реализовать новый рабочий процесс CI с использованием GitlabCI, но теперь я не могу понять проблему. Я следовал этому документу и выбираю метод привязки сокета Docker.

Все запущено на одном компьютере, ранчерос :

 $ uname -a    
Linux xxx 4.2.8-ckt4-rancher #1 SMP Tue Apr 5 16:12:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES
57801c725226        gitlab/gitlab-runner:latest   "/usr/bin/dumb-init /"   14 hours ago        Up 14 hours                                                    gitlab-runner
50e3a9dabe77        gitlab/gitlab-ce              "/assets/wrapper"        17 hours ago        Up 17 hours         80/tcp, 443/tcp, 0.0.0.0:1022->22/tcp      gitlab
ed2b6d9a8ea7        jwilder/nginx-proxy           "/app/docker-entrypoi"   6 days ago          Up 3 days           0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   proxy
  

Запустите команду контейнера бегуна

 $ docker run -d --name gitlab-runner --restart always 
-v ~/docker/gitlab-runner/config:/etc/gitlab-runner 
-v /var/run/docker.sock:/var/run/docker.sock 
gitlab/gitlab-runner:latest
  

Конфигурация бегуна

 $ sudo cat ~/docker/gitlab-runner/config/config.toml 
concurrent = 1
check_interval = 0

[[runners]]
  name = "ITrancher, docker based runner 4"
  url = "https://git.xxx.com"
  token = "xxx"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
  [runners.cache]
  [runners.kubernetes]
    host = ""
    cert_file = ""
    key_file = ""
    ca_file = ""
    image = ""
    namespace = ""
    privileged = false
    cpus = ""
    memory = ""
    service_cpus = ""
    service_memory = ""
  

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

 image: docker:latest
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.xxx.com
stages:
- build
build:
  stage: build
  script:
  - docker build --pull -f Dockerfile-php -t registry.xxx.com/dev/kayako-php:latest .
  - docker push registry.xxx.com/dev/kayako-php:latest
  - docker build --pull -f Dockerfile-nginx -t registry.xxx.com/dev/kayako-nginx:latest .
  - docker push registry.xxx.com/dev/kayako-nginx:latest
  

И это то, что я получаю в GitlabCI, когда сборка подключена

 Running with gitlab-ci-multi-runner 1.6.1 (c52ad4f)
Using Docker executor with image docker:latest ...
ERROR: Failed to create container volume for /builds/dev write unix @->/var/run/docker.sock: write: broken pipe
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Using Docker executor with image docker:latest ...
ERROR: Failed to create container volume for /builds/dev write unix @->/var/run/docker.sock: write: broken pipe
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Using Docker executor with image docker:latest ...
ERROR: Failed to create container volume for /builds/dev write unix @->/var/run/docker.sock: write: broken pipe
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
ERROR: Build failed (system failure): write unix @->/var/run/docker.sock: write: broken pipe
  

И это результат, когда я пытаюсь запустить сборку локально с --debug флагом внутри моего контейнера gitlab-runner.

 # gitlab-runner --debug exec docker build
Runtime platform                                    arch=amd64 os=linux revision=c52ad4f version=1.6.1
Running with gitlab-ci-multi-runner 1.6.1 (c52ad4f)
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; thenntexec /usr/local/bin/bash nelif [ -x /usr/bin/bash
  ]; thenntexec /usr/bin/bash nelif [ -x /bin/bash ]; thenntexec /bin/bash nelif
  [ -x /usr/local/bin/sh ]; thenntexec /usr/local/bin/sh nelif [ -x /usr/bin/sh
  ]; thenntexec /usr/bin/sh nelif [ -x /bin/sh ]; thenntexec /bin/sh nelsentecho
  shell not foundntexit 1nfinn"
command: bash
arguments: []
passfile: false
extension: ""
  build=1 project=1
Using Docker executor with image docker:latest ...
Applying docker.Client transport fix: amp;{false 0xc820306810 <nil> 0xc820238320 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [] [] <nil>}  host=unix:///var/run/docker.sock
Creating build volume...                            build=1 project=1
Looking for prebuilt image gitlab-runner-prebuilt-x86_64:c52ad4f ...  build=1 project=1
Loading prebuilt image...                           build=1 project=1
Closed all idle connections for docker.Client: amp;{false 0xc820306900 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930} 
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; thenntexec /usr/local/bin/bash nelif [ -x /usr/bin/bash
  ]; thenntexec /usr/bin/bash nelif [ -x /bin/bash ]; thenntexec /bin/bash nelif
  [ -x /usr/local/bin/sh ]; thenntexec /usr/local/bin/sh nelif [ -x /usr/bin/sh
  ]; thenntexec /usr/bin/sh nelif [ -x /bin/sh ]; thenntexec /bin/sh nelsentecho
  shell not foundntexit 1nfinn"
command: bash
arguments: []
passfile: false
extension: ""
  build=1 project=1
Using Docker executor with image docker:latest ...
Applying docker.Client transport fix: amp;{false 0xc820306900 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930}  host=unix:///var/run/docker.sock
Creating build volume...                            build=1 project=1
Looking for prebuilt image gitlab-runner-prebuilt-x86_64:c52ad4f ...  build=1 project=1
Loading prebuilt image...                           build=1 project=1
Closed all idle connections for docker.Client: amp;{false 0xc8203072f0 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930} 
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; thenntexec /usr/local/bin/bash nelif [ -x /usr/bin/bash
  ]; thenntexec /usr/bin/bash nelif [ -x /bin/bash ]; thenntexec /bin/bash nelif
  [ -x /usr/local/bin/sh ]; thenntexec /usr/local/bin/sh nelif [ -x /usr/bin/sh
  ]; thenntexec /usr/bin/sh nelif [ -x /bin/sh ]; thenntexec /bin/sh nelsentecho
  shell not foundntexit 1nfinn"
command: bash
arguments: []
passfile: false
extension: ""
  build=1 project=1
Using Docker executor with image docker:latest ...
Applying docker.Client transport fix: amp;{false 0xc8203072f0 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930}  host=unix:///var/run/docker.sock
Creating build volume...                            build=1 project=1
Looking for prebuilt image gitlab-runner-prebuilt-x86_64:c52ad4f ...  build=1 project=1
Loading prebuilt image...                           build=1 project=1
Closed all idle connections for docker.Client: amp;{false 0xc820307a10 <nil> 0x39d9ee0 unix:///var/run/docker.sock 0xc820232780 0xc820340ba0 [1 18] [1 22] [1 18] 0xc820306930} 
ERROR: Preparation failed: write unix @->/var/run/docker.sock: write: broken pipe
Will be retried in 3s ...
ERROR: Build failed (system failure): write unix @->/var/run/docker.sock: write: broken pipe
FATAL: write unix @->/var/run/docker.sock: write: broken pipe 
  

Но мой докер.привязка к носку, похоже, в порядке :

 # echo -e "GET /containers/json HTTP/1.0rn" | nc -U /var/run/docker.sock
HTTP/1.0 200 OK
Content-Type: application/json
Server: Docker/1.10.3 (linux)
Date: Wed, 19 Oct 2016 10:22:58 GMT

[{json is ok}]
  

У кого-нибудь есть идея?

Комментарии:

1. Есть ли у бегуна разрешения на доступ к сокету?

2. Я так думаю, я попытался # echo -e "GET /containers/json HTTP/1.0rn" | nc -U /var/run/docker.sock из контейнера runner, и, похоже, все в порядке.

Ответ №1:

Это известная ошибка с последними версиями gitlab-ci-multi-runner (начиная с v1.5.0 ).

Вы можете использовать версию 1.4.2 , пока ошибка не будет исправлена должным образом. Вот ваша docker run команда, использующая последнюю рабочую версию:

 $ docker run -d --name gitlab-runner --restart always 
-v ~/docker/gitlab-runner/config:/etc/gitlab-runner 
-v /var/run/docker.sock:/var/run/docker.sock 
gitlab/gitlab-runner:v1.4.2
  

Проблема уже существует в репозитории Gitlab CI с несколькими исполнителями:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1617

Редактировать: Пожалуйста, используйте v1.4.2 вместо v1.4.3 . v1.4.3 Ошибочно помечен в Docker Hub:

 $ docker run --rm -it gitlab/gitlab-runner:v1.4.3 -v
Version:      1.5.2
Git revision: 76fdacd
Git branch:   1-5-stable
GO version:   go1.6.3
Built:        Wed, 24 Aug 2016 13:35:10  0000
OS/Arch:      linux/amd64
  

Комментарии:

1. Большое вам спасибо! Ты мой бог!

Ответ №2:

этот вопрос довольно старый, и, хотя на исходный вопрос, возможно, был дан ответ и работа с предлагаемым обходным решением, в настоящее время он НЕ РАБОТАЕТ с версией 11.0.0 gitlab-runner. Я смог приступить к работе…

ОС: rancheros 1.4.0 консоль: alpine Docker: docker-17.12.1-ce amp;amp; docker-18.03.1-ce

Я установил runner как обычно, затем зарегистрировался. Обнаружен сбой … затем отредактирован файл toml и изменен privileged = false на privileged = true .


sudo vim /srv/gitlab-runner/config/config.toml
docker stop gitlab-runner
docker rm gitlab-runner
docker run -d --privileged --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest