/var/run/docker.sock: подключиться: отказано в разрешении ведомого Jenkins на кластере ecs - PullRequest
0 голосов
/ 21 марта 2019

Я использую плагин AWS EC2 для Jenkins, чтобы порождать рабов Jenkins при создании задач.Проблемы с правами доступа при попытке построить докер внутри контейнера докера.Я просмотрел десятки других постов, и люди часто приводят это как ответ:

  1. создать группу Docker
  2. добавить пользователя jenkins в группу Docker
  3. restart
  4. все волшебно работает

Дело в том, что я не могу перезапустить, потому что раб jenkins появляется при использовании плагина, и я не уверен, как правильно перезапустить его дляэто правильно обрабатывать сборку при перезапуске.Кроме того, это будет означать запуск перезапуска на хосте, несмотря на то, что он находится в контейнере, что звучит как плохая идея.

Я пробовал:

  1. Добавление jenkins вПользователи sudo в dockerfile RUN adduser jenkins sudo, за которыми следует RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

  2. Изменение владельца файла сокета Docker RUN chown root:jenkins /var/run/docker.sock

  3. Изменение разрешений сокета Docker chmod 777 /var/run/docker.sock

  4. Использование newgrp, поэтому мне не нужно перезапускать докер из-за пределов контейнера

По сути, как мне обойтись неперезапустить службу докера, а также предоставить разрешения sudo для создания файлов докера внутри подчиненного контейнера jenkins?Или, если я действительно смогу перезапустить, все еще используя плагин EC2, как мне лучше всего это сделать?

Текущий файл Docker:

FROM jenkins/jnlp-slave

USER root

RUN apt-get update && \
    apt-get -y install apt-transport-https \
        ca-certificates \
        curl \
        gnupg2 \
        software-properties-common && \
    curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
    add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
      $(lsb_release -cs) \
      stable" && \
    apt-get update && \
    apt-get -y install docker-ce && \
    apt-get -y install sudo

VOLUME /var/run/docker.sock

RUN adduser jenkins sudo

RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

RUN usermod -aG docker jenkins

RUN chmod 777 /var/run/docker.sock

RUN chown root:jenkins /var/run/docker.sock

USER jenkins

Спасибо!

1 Ответ

0 голосов
/ 23 июня 2019

Я также столкнулся с этой проблемой, я должен сделать следующие шаги для его работы:

  1. Обновите файл docker для установки docker-client.
  2. Обновите конфигурацию ECS Cloud Jenkins, чтобы выполнить монтирование по объему, т.е.
  3. Наиболее важной частью является запуск команд докера внутри контейнера. Есть два варианта:

    я. запустите containerUser от имени пользователя root. это наиболее удобный шаг, если вы запускаете контейнер от имени пользователя root, если вам подходит

    II. добавить пользователя jenkins в группу докеров на хосте

    usermod -a -G docker jenkins

    Получите гид группы докеров и отобразите гид внутри контейнера. Обновите gid контейнера docker до gid хоста. Таким образом, вы не получите ошибку permission denied и вам не нужно делать chown 777 /var/run/docker.sock

...