Докер: Отримано дозвіл під час спроби підключитися до сокету демона Docker на unix: ///var/run/docker.sock


175

Я новачок у докер. Я щойно намагався використовувати докер у своїй локальній машині (Ubuntu 16.04) з Дженкінсом.

Я налаштував нове завдання із сценарієм нижче конвеєра.

node {
    stage('Build') {
      docker.image('maven:3.3.3').inside {
        sh 'mvn --version'
      }
    }
}

Але це не вдається з нижчою помилкою.

введіть тут опис зображення


1
це монолітний Дженкінс або має налаштування майстра-раба? Перевірте, з яким користувачем ви виконуєте команду перевірки докера. Перевірте, чи /var/run/docker.sock має доступ до групи RW.
Рам Камат


2
Кроки після встановлення докера
radistao

Відповіді:


297

Користувача jenkinsпотрібно додати до групи docker:

sudo usermod -a -G docker jenkins

Потім перезапустіть Дженкінса.

Редагувати

Якщо ви прийшли до цього питання про переповнення стека, оскільки ви отримуєте це повідомлення від докера, але ви не використовуєте jenkins, швидше за все, помилка однакова: ваш непривілейований користувач не належить до групи докерів.

Ви можете зробити:

sudo usermod -a -G docker alice

або будь-яке ваше ім’я користувача.

Ви можете перевірити це наприкінці grep docker /etc/groupі побачити щось подібне:

docker:x:998:alice

в одному з рядків.

Потім змініть ідентифікатор групи користувачів на docker:

newgrp docker

88
та переробляти користувача
Ілля Колесніков

8
Приємна відповідь, але щоб бути більш загальним, ми могли б це зробити: sudo usermod -a -G docker $USERі вийти з системи, або перезавантажити. посилання
Жульєн Наймбал

10
Мені довелося перезапустити сервер, щоб це справді працювало.
etagwerker

3
Мені довелося відключити / підключити свої вузли, щоб це працювало (вони підключені через ssh)
GaspardP

29
Не потрібно знову входити в систему, просто використовуйте newgrp dockerзамість цього ж термінального сеансу.
C14L

68

Мої перші рішення:

usermod -aG docker jenkins
usermod -aG root jenkins
chmod 664 /var/run/docker.sock

Але жоден з них не працює на мене, я намагався:

chmod 777 /var/run/docker.sock

Це працює, але я не знаю, чи це правильний дзвінок.


4
Причина, чому це не вдалося, ймовірно, в тому, що вам довелося знову відкрити термінал. Це не вдалося після 664, але потім я відкрив нову оболонку, яка працювала.
PHGamer

1
Я спробував повторно відкрити, але він почав працювати лише після останнього chmod 777
іронічно

Проблема полягала в тому, що після перезавантаження 777 було скинуто на 660. Що вирішило для мене проблему, це "usermod -aG користувачів jenkins".
іронічно

Я усвідомлюю, що це було скинуто, але не встановлюйте дозволу docker.sock на 777. Це дає кому-небудь root у вашій системі. Вони можуть спілкуватися з докером і створювати пільгові контейнери без обмежень.
Ленс Хадсон

3
Незважаючи на це працювало для автора і навіть для мене, дати більший доступ до docker.sockфайлу - не найкраще рішення, потрібно лише виконати usermod... інструкції, а потім перезавантажити систему, інакше це не набуває чинності
Mariano Ruiz

32

Успіх для мене

sudo usermod -a -G docker $USER
reboot

5
не потрібно перезавантажувати. Просто вийдіть із системи, а потім увійдіть знову. Я говорю про usermod
Abdennour TOUMI

1
У Ubuntu 18.04 мені довелося перезавантажити, щоб налаштування працювало.
Ніхілу

1
У Ubuntu 20.04 мені було потрібно перезавантаження. Закрити сеанс недостатньо.
framontb

Або запустіть su $ {USER} замість виходу
goonerify

19

2018-08-19

Я цілий день застряг у цьому, і оскільки я не знайшов повної відповіді на те, чому і як, я опублікую її для інших людей, які натрапляють на ту ж проблему, і відповіді зверху не працюють.

Це 3 найважливіші дії під час запуску Дженкінса всередині докера:

  1. Ви монтуєте розетку /var/run/docker.sockдо контейнера для дженкінса, щоб мати можливість використовувати докер від хоста.
  2. Ви повинні встановити докер всередині контейнера, щоб ним скористатися. Це чудова і проста стаття про те, як це зробити. Зверніть увагу, що новіші версії, можливо, вже встановили докер
  3. Ви біжите sudo usermod -a -G docker jenkins, щоб додати джинкіни до групи докерів. Однак тут ви можете зіткнутися з проблемою дозволу, якщо докер хоста та докер контейнера не мають однакового ідентифікатора групи, тому дуже важливо відрегулювати gid докер-контейнера так, як gid хокера докера хоста

Ви можете зробити це як частину запуску скрипта або просто за допомогою execі робити це вручну groupmod -g <YOUR_HOST_DOCKER_GID> docker.

Крім того , не зраджувати дозволу з /var/run/docker.sock777 або тому подібних , тому що це великий ризик безпеки, ви, в основному даючи кожен дозвіл на використання вантажник на вашій машині

Сподіваюся, це допомагає


1
Дякую - зауважте, що для поточних зображень Jenkins Docker команди докера вже встановлені (а apt-get - ні.) Ваші інші пункти - додавання Дженкінса до потрібної групи та забезпечення, що GID відповідає тій, що знаходиться від хокера Докера, залишаються пляма на.
Стів Бондс

1
Врятувало мені життя з проблемою ідентифікації групи. Дякую!
lenkovi

13

Я додав користувача jenkins до кореневої групи та перезапустив jenkins, і він почав працювати.

sudo usermod -a -G root jenkins
sudo service jenkins restart

16
Це погана практика безпеки. Кращим підходом є ця відповідь .
kevindaub

11

Змініть дозвіл на доступ до файлу docker.sock

chmod 777 /var/run/docker.sock

або ви можете використовувати sudoна початку команди.

chmod 777дозволить усі дії для всіх користувачів, в той час як chmod 666дозволить усім користувачам читати і писати, але не може виконати файл.


Це те, що мені було потрібно, дякую!
crazynx

9

Просто додавання dockerв якості додаткової групи для jenkinsкористувача

sudo usermod -a -G docker jenkins

не завжди достатньо при використанні зображення Докера як агента Дженкінса . Тобто, якщо ваш Jenkinsfileпочинається з pipeline{agent{dockerfileабо pipeline{agent{image:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkinsAgent'
        }
    }
    stages {

Це тому, що Дженкінс виконує docker runкоманду, в результаті якої виникають три проблеми.

  • Агент (ймовірно) не встановить програми Docker.
  • Агент не матиме доступу до розетки демона Docker, і тому спробує запустити Docker-in-Docker, що не рекомендується .
  • Дженкінс надає числовий ідентифікатор користувача та числовий ідентифікатор групи, який повинен використовувати Агент. Агент не матиме додаткових груп, оскільки docker runвін не здійснює вхід у контейнер (це більше схоже на а sudo).

Встановлення Docker для агента

Надання програм Docker доступними для зображення Docker просто вимагає виконання кроків установки Docker у вашому Dockerfile:

# Dockerfile.jenkinsAgent
FROM debian:stretch-backports
# Install Docker in the image, which adds a docker group
RUN apt-get -y update && \
 apt-get -y install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release \
   software-properties-common

RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

RUN apt-get -y update && \
 apt-get -y install \
   docker-ce \
   docker-ce-cli \
   containerd.io

...

Розміщення розетки демона Docker

Як було сказано раніше , виправити другу проблему означає запустити контейнер Jenkins Docker, щоб він ділив Docket демона Docker з демоном Docker, який знаходиться поза контейнером. Тому вам потрібно сказати Дженкінсу запустити контейнер Docker з цим спільним доступом, таким чином:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkinsAgent'
            args '-v /var/run/docker.sock:/var/run/docker.sock'
        }
    }

Встановлення UID та GID

Ідеальним виправленням третьої проблеми було б створення додаткових груп для Агента. Це не здається можливим. Єдине мені відоме виправлення - запустити Агента за допомогою UID Jenkins та Docker GID (сокет має дозвіл на групове записування і належить root.docker). Але загалом, ви не знаєте, що це за ідентифікатори (вони присвоювались коли useradd ... jenkinsта groupadd ... dockerзапускалися, коли Дженкінс і Докер були встановлені на хості). І ви не можете просто сказати Дженкінсу користувачеві користувача jenkinsта групуdocker

args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'

тому що це говорить Docker використовувати користувача та групу, які названі jenkinsта docker в межах зображення , а ваше зображення Docker, ймовірно, не має jenkinsкористувача та групи, і навіть якби це не було, немає гарантії, що він буде мати однаковий UID та GID, як хост, і аналогічно немає гарантії того, що dockerGID однаковий

На щастя, Дженкінс запускає docker buildкоманду для вашого Dockerfile у сценарії, тож ви можете зробити магію оболонки-скрипту, щоб пройти через цю інформацію, будучи аргументами Docker збирання:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkinsAgent'
            additionalBuildArgs  '--build-arg JENKINSUID=`id -u jenkins` --build-arg JENKINSGID=`id -g jenkins` --build-arg DOCKERGID=`stat -c %g /var/run/docker.sock`'
            args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'
        }
    }

Це використовує idкоманду , щоб отримати UID і GID від jenkinsкористувача і statкоманд , щоб отримати інформацію про гніздо Докера.

Ваш Dockerfile може використовувати цю інформацію для установки на jenkinsкористувача і dockerгрупи для агента, використовуючи groupadd, groupmodі useradd:

# Dockerfile.jenkinsAgent
FROM debian:stretch-backports
ARG JENKINSUID
ARG JENKINSGID
ARG DOCKERGID
...
# Install Docker in the image, which adds a docker group
RUN apt-get -y update && \
 apt-get -y install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release \
   software-properties-common

RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

RUN apt-get -y update && \
 apt-get -y install \
   docker-ce \
   docker-ce-cli \
   containerd.io

...
# Setup users and groups
RUN groupadd -g ${JENKINSGID} jenkins
RUN groupmod -g ${DOCKERGID} docker
RUN useradd -c "Jenkins user" -g ${JENKINSGID} -G ${DOCKERGID} -M -N -u ${JENKINSUID} jenkins

Це відмінне комплексне рішення і єдине, що працювало для мене при використанні докерного сокета, який ділився з docker через dockerfile. Це має бути власне повідомлення в блозі. Дякую за це!
Грег Олмстед

Здається, ви могли пройти -u jenkins:$(getent group docker | cut -d: -f3)?
Gillespie

При передачі аргументів, мабуть, краще змінити наступний рядок: За args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'допомогою args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:jenkins --group-add docker' передачі -u jenkins: docker ви змінюєте основну групу користувачів, що означає, коли користувач пише файл, скажімо, в робочій області, він встановить файл користувач до дженкінса та група докер. Що, мабуть, не те, що ми маємо намір.
Ніколя Форні

8

У мене Дженкінс працює в Docker і підключається. Jenkins використовує Docker-сокет від хост-машини Ubuntu 16.04 через об'єм до /var/run/docker.sock.

Для мене рішення було:

1) Внутрішній контейнер Docker з Дженкінса ( docker exec -it jenkins bashна хост-машині)

usermod -a -G docker jenkins
chmod 664 /var/run/docker.sock
service jenkins restart (or systemctl restart jenkins.service)
su jenkins

2) На хост-машині:

sudo service docker restart

664 засоби - читати та записувати (але не виконувати) для власника та користувачів із групи.


Це єдине рішення, яке не потребує входу / входу, тобто рішення, яке працює при спробі запустити це в скрипті оболонки.
ПВ

3

Виконуючи виробничу конфігурацію, я отримав проблему з дозволом. Я намагався вирішити проблему нижче.

Повідомлення про помилку

ubuntu@node1:~$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Рішення: дозволи на розетку, вказані у повідомленні про помилку, /var/run/docker.sock:

ubuntu@ip-172-31-21-106:/var/run$ ls -lrth docker.sock
srw-rw---- 1 root root 0 Oct 17 11:08 docker.sock
ubuntu@ip-172-31-21-106:/var/run$ sudo chmod 666 /var/run/docker.sock
ubuntu@ip-172-31-21-106:/var/run$ ls -lrth docker.sock
srw-rw-rw- 1 root root 0 Oct 17 11:08 docker.sock

Після зміни дозволу на docket.sock потім виконайте команду нижче, щоб перевірити дозволи.

ubuntu@ip-172-31-21-106:/var/run$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2

У моєму випадку потрібно було не лише додати jenkinsкористувача до dockerгрупи, але зробити цю групу первинною групою jenkinsкористувача.

# usermod -g docker jenkins
# usermod -a -G jenkins jenkins

Не забудьте підключити підлеглий вузол jenkins або перезапустити сервер jenkins, залежно від вашого випадку.


2

16.02.2019

Більшість кроків були для мене такими ж, як і інші. Однак мені не вдалося додати джинкіни до групового докера за допомогою usermod із згаданими рішеннями.

Я спробував таку команду від хокера докера та з запущеного контейнера докера :

sudo usermod -a -G docker jenkins

(Я ввійшов до запущеного контейнера docker із наступною командою від хокера docker :

docker exec -t -i my_container_id_or_name /bin/bash

)

Отримано від хоста докера :

usermod: користувача 'jenkins' не існує

Отримано з контейнера докер :

Ми віримо, що ви отримали звичайну лекцію від місцевого системного адміністратора. Зазвичай зводиться до цих трьох речей:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] пароль для jenkins:

Я не знав пароль.

Без sudoчастини команди я в контейнері docker отримав:

usermod: у дозволі відмовлено. usermod: не вдається заблокувати / etc / passwd; спробуйте ще раз пізніше.

Рішення: Я увійшов в працюючу Docker контейнер з Докер хоста за допомогою наступної команди:

docker exec -t -i -u root my_container_id_or_name /bin/bash

Тепер я ввійшов як root і видав таку команду:

usermod -a -G docker jenkins

Потім від хокера докера я перезапустив свій запущений контейнер докера з наступною командою:

docker restart my_container_id_or_name

Після цього я розпочав роботу з джинкінами, і це закінчилося успіхом.

Я використовував тільки користувач root для видачі usermodкоманди для користувача jenkins.


2

2019-05-26

Це працювало для мене!

Приклад докер-композиції:

version: "3"
services:
  jenkins:
    image: jenkinsci/blueocean
    privileged: true
    ports:
      - "8080:8080"
    volumes:
      - $HOME/learning/jenkins/jenkins_home:/var/jenkins_home
    environment:
      - DOCKER_HOST=tcp://socat:2375
    links:
      - socat

  socat:
     image: bpack/socat
     command: TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock
     volumes:
        - /var/run/docker.sock:/var/run/docker.sock
     expose:
        - "2375"

2

Я зіткнувся з подібною проблемою, яка є проблемою дозволу, і причиною цієї проблеми є те, що демон / сервер Docker завжди працює як rootкористувач, і хоче, щоб ви завжди попередньо виконували команду docker sudo.

Демон Docker прив'язується до сокета Unix замість порту TCP. За замовчуванням Unix socket належить користувачеві, rootа інші користувачі можуть отримати доступ до нього лише за допомогоюsudo .

Щоб виправити це, ось що для мене спрацювало:

По-перше, перевірте, чи у вас вже створена докерська група:

cat /etc/group

Якщо ви не знайдете dockerу списку, який відображається, вам потрібно буде створити його:

sudo groupadd docker

Далі підтвердьте свою userта свою groupкоманду за допомогою команди нижче:

cat /etc/group

Прокрутіть, щоб переглянути групу для докера. Він повинен бути такого формату

docker:x:140:promisepreston

де dockerмоя groupі promiseprestonмояuser

Тепер ми можемо додати вашого користувача до докерної групи

Лише для файлів контейнерів Docker:

Скопіюйте та запустіть команду нижче у своєму терміналі саме так, як вона вказана, не змінюючи її ні в якому разі, незалежно від зображення докера / контейнера / команди, який ви хочете запустити, або намагаєтеся запустити, або викликає проблему з дозволом:

sudo usermod -aG docker $USER

Після запуску команди вище, вам потрібно буде Вийти та увійти назад, щоб повторно оцінити членство у вашій групі. Однак в Linux ви також можете запустити наступну команду нижче, щоб активувати зміни в групах ( Скопіюйте та запустіть команду нижче у своєму терміналі саме так, як це зазначено, не змінюючи її ні в якому разі, незалежно від зображення докера / контейнера / команди, що ви хочете запустити або намагаєтеся запустити або ставить дозволу на отримання дозволу ):

newgrp docker 

Тепер ви можете переконатися, що ви можете запускати докерські команди без дозволів sudo, запустивши команду, яка спричиняє проблему дозволів, скажіть ( Замініть my-commandна ім'я вашого зображення / контейнера / команди ):

docker run my-command

Для файлів файлової системи Docker та Local:

Якщо у вас є копія файлів у вашій локальній файловій системі, ви можете змінити право власності на каталог програм, де зберігаються файли програм, використовуючи такий формат:

sudo​​ ​ chown​​ ​ <your_user>:<your_group>​​ ​ -R​​ my-app-directory/

Тож у моєму випадку це буде:

sudo chown promisepreston:docker -R my-app-directory/

Примітка. Будь ласка, запустіть цю команду всередині батьківського каталогу, у якому розміщено каталог додатків.

Це все.

Я сподіваюся, що це допомагає



1

Я біжу Дженкінса в контейнер для докера. Найпростішим рішенням для мене було створення власного зображення, яке динамічно встановлює GID, наприклад:

FROM jenkins/jenkins:lts
...
CMD DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) && \
    groupadd -for -g ${DOCKER_GID} docker && \
    usermod -aG docker jenkins && \
    sudo -E -H -u jenkins bash -c /usr/local/bin/jenkins.sh

Дивіться: https://github.com/jenkinsci/docker/isissue/263

Ви також можете запустити дженкіни з такими опціями:

-v /var/run/docker.sock:/var/run/docker.sock \
-u jenkins:$(getent group docker | cut -d: -f3)

Це передбачає, що на вашому зображенні dnkins встановлений клієнт докер. Дивіться: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci


1

Якщо у вас можуть виникнути помилки, як показано нижче,

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

або

level=error msg="failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: permission denied"

Просто спробуйте виконати такі команди,

$ sudo su - jenkins
$ sudo usermod -a -G docker $USER
$ sudo chown jenkins:docker /var/run/docker.sock

`sudo usermod -a -G docker $ USER 'запитає пароль jenkins, не знаючи, що таке пароль користувача.
3лох

Я думаю, ви повинні дати дозвіл на судо для користувача Дженкінса. або ви можете спробувати наступну команду в root користувача, usermod -a -G docker jenkinsіchown jenkins:docker /var/run/docker.sock
lakshmikandan

Не слід змінювати право власності на розетку на джинкіни. І ви повинні запускати судо, як будь-який звичайний користувач має доступ до судо, а не як джинкіни. Що ця відповідь додає до прийнятої відповіді?
Джим Стюарт

1

Я використовую офіційне зображення докера jenkins ( https://hub.docker.com/r/jenkins/jenkins ), але я думаю, що це рішення застосовно до більшості випадків використання, коли ми хочемо запустити Docker всередині контейнера Docker.

Рекомендований спосіб використання Docker всередині контейнера Docker - це використання Docker deamon хост-системи. Хороша стаття щодо цього: https://itnext.io/docker-in-docker-521958d34efd .

Секрет обробки дозволу, про який йдеться у цьому питанні, полягає у додаванні дозволів для користувача контейнера всередині контейнера, а не для хост-системи . Тільки користувач root має дозволи на це за замовчуванням

docker exec -it -u root <container-name> bash
usermod -a -G docker <username>

зробимо це. Не забудьте перезапустити контейнер.

Я думаю, найпростіший спосіб досягти цього - створити налаштований Dockerfile:

# Official jenkins image
FROM jenkins/jenkins:lts
# Swith to root to be able to install Docker and modify permissions
USER root
RUN apt-get update
# Install docker
RUN curl -sSL https://get.docker.com/ | sh
# Add jenkins user to docker group
RUN usermod -a -G docker jenkins
# Switch back to default user
USER jenkins

# Bild the image:
# sudo docker build -t yourusername/imagename .
# Run the image and mount with the followin bind mount option:
# sudo docker run --name imagename -d -p8080:8080 -v /var/run/docker.sock:/var/run/docker.sock yourusername/imagename

Не потрібно встановлювати весь докер на зображення Дженкінса, дивіться мою відповідь
deFreitas

1

Якщо хтось все ще стикається з проблемою на своїй локальній машині (Ubuntu), спробуйте нижче команду:

sudo chmod 666 /var/run/docker.sock

1

У моєму випадку це буде успішно працювати. перейдіть по місцевому репо і введіть цю команду.

sudo chmod 666 /var/run/docker.sock

0

На сервері, де працює Дженкінс, я використовував

sudo setfacl -m user:tomcat:rw /var/run/docker.sock

А потім запустіть кожен контейнер докера

-v /var/run/docker.sock:/var/run/docker.sock

Використання setfacl здається кращим варіантом, і не потрібен "-u користувач". Потім контейнери працюють як той самий користувач, який працює з Дженкінсом. Але я вдячний за будь-які відгуки експертів з безпеки.


0

використовувати нижче dockerfile

FROM jenkins/jenkins

USER root

# Install Docker
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


# Compose
RUN curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose



RUN usermod -aG docker jenkins
RUN usermod -aG root jenkins

USER jenkins


0

часто потрібна перезавантаження, щоб мати силу для нової групи користувачів та користувача.


0

Якщо ви запускаєте Дженкінса всередині контейнера-докера, а ваш Дженкінс посилається на хост-докер, ви можете це виправити лише за допомогою Dockerfile нижче:

FROM jenkins/jenkins:2.179
USER root
RUN groupadd docker && usermod -a -G docker jenkins
USER jenkins 

-6

Можливо, вам слід запустити докер з опцією "-u root" з самого початку

Принаймні, це вирішило мою проблему


1
Тоді ви можете отримати файли, створені як користувач root. Принаймні так сталося зі мною, з Докером 18.06.1.
Ернст де Хаан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.