Docker: Получено отказ в разрешении при попытке подключиться к сокету демона Docker в unix: ///var/run/docker.sock

177

Я новичок в докере. Я просто пытался использовать докер на моей локальной машине (Ubuntu 16.04) с Дженкинсом.

Я настроил новую работу с помощью сценария ниже конвейера.

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

Но это не с ошибкой ниже.

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

Понсуямбу Велладурай
источник
1
это монолитный Дженкинс или имеет мастер-раба? Проверьте, с каким пользователем вы выполняете команду docker inspect. Посмотрите, имеет ли /var/run/docker.sock доступ RW к группе.
Рам Камат
2
Действия после установки докера: docs.docker.com/install/linux/linux-postinstall/…
radistao

Ответы:

297

Пользователь jenkinsдолжен быть добавлен в группу docker:

sudo usermod -a -G docker jenkins

Затем перезапустите Дженкинс.

редактировать

Если вы пришли к этому вопросу о переполнении стека, потому что получили это сообщение от Docker, но не используете jenkins, скорее всего, ошибка та же: ваш непривилегированный пользователь не принадлежит к группе Docker.

Ты можешь сделать:

sudo usermod -a -G docker alice

или как там ваше имя пользователя.

Вы можете проверить это в конце выполнения grep docker /etc/groupи увидеть что-то вроде этого:

docker:x:998:alice

в одной из строк.

Затем измените идентификатор группы пользователей на docker:

newgrp docker
austingray
источник
90
и перелогинить пользователя
Илья Колесников
8
Хороший ответ, но чтобы быть более общим, мы могли бы сделать это: sudo usermod -a -G docker $USERи выйти из системы или перезагрузиться. ссылка
Жюльен Нямбал
10
Я должен был перезапустить свой сервер, чтобы это действительно заработало.
etagwerker
3
Мне пришлось отключить / повторно подключить мои узлы, чтобы это работало (они подключены через ssh)
GaspardP
29
Нет необходимости входить снова, просто используйте newgrp dockerвместо этого в том же терминальном сеансе.
C14L
69

Моими первыми решениями было:

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 users jenkins».
иронично
Я понимаю, что он был сброшен, но не устанавливайте разрешения docker.sock равными 777. Это дает любому пользователю root в вашей системе. Они могут общаться с докером и создавать привилегированные контейнеры без ограничений.
Лэнс Хадсон
3
Несмотря на то, что это сработало для автора и даже для меня, дать больший доступ к docker.sockфайлу - не лучшее решение, вам нужно только выполнить usermod... инструкции, а затем перезагрузить систему, иначе это не сработает
Mariano Ruiz
32

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

sudo usermod -a -G docker $USER
reboot
shellhub
источник
5
перезагрузка не нужна. Просто выйдите и войдите снова. Я говорю о usermod
Abdennour TOUMI
1
В Ubuntu 18.04 мне пришлось перезагрузиться, чтобы настройка работала.
Нихилу
1
На Ubuntu 20.04 мне понадобилась перезагрузка. Закрытие сессии недостаточно.
Framontb
Или запустите su $ {USER} вместо выхода
goonerify
19

2018-08-19

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

Вот три важных шага при запуске Jenkins в докере:

  1. Вы устанавливаете сокет /var/run/docker.sockв контейнер jenkins, чтобы иметь возможность использовать докер с хоста.
  2. Вы должны установить докер внутри контейнера, чтобы использовать его. Это отличная и простая статья о том, как это сделать. Обратите внимание, что в более новых версиях уже может быть установлен докер
  3. Вы бежите sudo usermod -a -G docker jenkins, чтобы добавить Дженкинса в группу Docker. Однако здесь вы можете столкнуться с проблемой прав доступа, если у докера хоста и докера контейнера нет одинакового идентификатора группы, поэтому очень важно настроить GID докера контейнера так, чтобы он совпадал с GID докера хоста.

Вы можете сделать это как часть запуска скрипта или просто с помощью execи делать это вручную groupmod -g <YOUR_HOST_DOCKER_GID> docker.

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

Надеюсь это поможет

Урош Т.
источник
1
Спасибо - обратите внимание, что для текущих образов Jenkins Docker команды docker уже установлены (а apt-get нет.) Ваши другие замечания - добавление Jenkins в нужную группу и обеспечение того, что GID совпадает с GID с хоста Docker, остаются место на.
Стив Бондс
1
Спасли мою жизнь с проблемой идентификатора группы. Спасибо!
Ленкови
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все пользователи будут читать и писать, но не смогут выполнить файл.

USMAN FAZIL
источник
Это то, что мне было нужно, спасибо!
Crazynx
9

Просто добавив dockerв качестве дополнительной группы для jenkinsпользователя

sudo usermod -a -G docker jenkins

не всегда достаточно при использовании образа 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что не делает логин для контейнера (это больше похоже на a 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, чтобы он разделял сокет демона Docker с демоном Docker, который находится вне контейнера. Таким образом, вы должны указать Jenkins запустить контейнер Docker с таким общим доступом:

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

Установка UID и GID

Идеальным решением третьей проблемы было бы создание дополнительных групп для Агента. Это не представляется возможным. Единственное исправление, о котором я знаю, - это запуск Агента с UID Дженкинса и GID Docker (сокет имеет разрешение на запись в группу и принадлежит ему root.docker). Но в целом вы не знаете, что это за идентификаторы (они были выделены, когда useradd ... jenkinsи groupadd ... dockerвыполнялись, когда на хосте были установлены Jenkins и Docker). И вы не можете просто сказать Jenkins пользователю jenkinsи группе пользователейdocker

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

потому что это говорит Docker использовать пользователя и группу, которые названы jenkinsи находятся docker внутри образа , и ваш образ Docker, вероятно, не имеет jenkinsпользователя и группы, и даже если бы это было так, не было бы никакой гарантии, что он будет иметь те же UID и GID, что и хост, и нет аналогичных гарантий, чтоdocker GID одинаков

К счастью, Дженкинс запускает 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
Raedwald
источник
Это отличное комплексное решение, и единственное, которое сработало для меня, когда я использовал общий доступ к докеру через dockerfile. Это должен быть собственный пост в блоге. Спасибо за это!
Грег Олмстед
Похоже, вы могли бы пройти -u jenkins:$(getent group docker | cut -d: -f3)?
Гиллеспи
При передаче аргументов, вероятно, лучше изменить следующую строку: args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'by args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:jenkins --group-add docker' При передаче -u jenkins: docker вы меняете основную группу пользователей, что означает, что когда пользователь пишет файл, скажем, в рабочей области, он устанавливает файл пользователь к Дженкинсу и группа к докеру. Что, вероятно, не то, что мы намереваемся.
Николас Форни
8

У меня есть Jenkins, работающий в Docker, и подключенный Jenkins использует сокет Docker с хост-машины Ubuntu 16.04 через том в /var/run/docker.sock.

Для меня решение было:

1) Внутри Docker контейнера Jenkins ( 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 означает - читать и писать (но не выполнять) для владельца и пользователей из группы.

героин
источник
Это единственное решение, которое не требует входа в систему или входа в систему, то есть решение, которое работает при попытке запустить это в сценарии оболочки.
PV
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

2019-02-16

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

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

sudo usermod -a -G docker jenkins

(Я вошел в работающий докер-контейнер с помощью следующей команды с хоста докера :

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] пароль для Дженкинса:

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

Без sudoчасти команды, в контейнере докера я получил:

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.

Z3d4s
источник
2

2019-05-26

Это сработало для меня!

Пример docker-compose:

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 принадлежит пользователю, rootи другие пользователи могут получить к нему доступ только с помощьюsudo .

Чтобы это исправить, вот что сработало для меня:

Во-первых, проверьте, если у вас уже есть группа докеров:

cat /etc/group

Если вы не найдете dockerв списке, который отображается, вам нужно будет создать его:

sudo groupadd docker

Затем подтвердите свои userи ваши с groupпомощью команды ниже:

cat /etc/group

Прокрутите, чтобы увидеть группу для докера. Это должно быть в этом формате

docker:x:140:promisepreston

где dockerмой groupи promiseprestonмойuser

Теперь мы можем добавить вашего пользователя в группу Docker

Только для файлов контейнера Docker:

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

sudo usermod -aG docker $USER

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

newgrp docker 

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

docker run my-command

Для файлов Docker и локальной файловой системы:

Если у вас есть копия файлов в локальной файловой системе, вы можете изменить владельца каталога приложения, в котором хранятся файлы приложения, используя этот формат:

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

Так что в моем случае это будет:

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

Примечание: Запустите эту команду внутри родительского каталога, в котором находится каталог приложения.

Вот и все.

надеюсь, это поможет

Обещание Престон
источник
1
sudo usermod -a -G docker jenkins
sudo service jenkins restart
Фрэнк Хоу
источник
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/issues/263

В качестве альтернативы вы можете запустить jenkins со следующими параметрами:

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

Это предполагает, что на вашем образе jenkins установлен клиент Docker. Смотрите: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci

Gillespie
источник
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
lakshmikandan
источник
sudo usermod -a -G docker $ USER 'спросит пароль jenkins, не зная, какой пароль у пользователя.
3lok
Я думаю, что вы должны дать разрешение sudo для пользователя Jenkins. или вы можете попробовать usermod -a -G docker jenkinschown jenkins:docker /var/run/docker.sock
выполнить
Вы не должны менять владельца сокета на Дженкинса. И вы должны запускать sudo как любой обычный пользователь, имеющий доступ к sudo, а не как jenkins. Что этот ответ добавляет к принятому ответу?
Джим Стюарт
1

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

Рекомендованный способ использования Docker внутри контейнера Docker - это использование Docker хост-системы. Хорошая статья относительно этого: 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
ruwanmadushanka
источник
0

На сервере, где работает Jenkins, я использовал

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

А затем запустите каждый док-контейнер с

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

Использование setfacl кажется лучшим вариантом, и «-u user» не требуется. Затем контейнеры запускаются от имени того же пользователя, на котором работает Jenkins. Но я был бы признателен за любые отзывы экспертов по безопасности.

java4africa
источник
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
Eslamspot
источник
0

в моем случае это был только запуск службы Docker:

sudo service docker start
Бадр Беллай
источник
0

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

Fahad
источник
0

Если вы запускаете Jenkins в док-контейнере, а ваш Jenkins связывается с хост-докером, то вы можете это исправить просто с помощью Dockerfile ниже:

FROM jenkins/jenkins:2.179
USER root
RUN groupadd docker && usermod -a -G docker jenkins
USER jenkins 
deFreitas
источник
-6

Возможно, вам стоит запустить докер с опцией "-u root" с самого начала

По крайней мере, это решило мою проблему

Андерс К.
источник
1
Тогда вы можете получить файлы, созданные как пользователь root. По крайней мере, так случилось со мной, с Docker 18.06.1.
Эрнст де Хаан