Дженкинс набирает unix /var/run/docker.sock: подключиться: в MacOS отказано в разрешении - PullRequest
2 голосов
/ 30 июня 2019

Я работаю в Jenkins локально, и на моей машине также установлен докер.

У меня есть работа Jenkins, которая использует файл Jenkins для

  1. Создание проекта Maven
  2. Создание образа докера
  3. Развертывание в док-центре.

У меня установлены все подключаемые модули докеров в Jenkins, но когда выполняется шаг Build, я получаю ...

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.39/build?
buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=w6ypm3t1b0qefyxh9omfvntru&shmsize=0&t=app-web&target=&ulimits=null&version=1: dial unix /var/run/docker.sock: connect: permission denied

Я не могу изменить разрешения на

lrwxr-xr-x   1 macuser          staff              72 Jun 30 20:36 docker.sock -> /Users/john/Library/Containers/com.docker.docker/Data/docker.sock

Любая помощь с благодарностью

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Ваша основная проблема, потому что пользователь, который используется через Jenkins, вероятно, с именем jenkins не имеет достаточных прав для запуска docker.

Таким образом, вам необходимо объединить пользователя в группу staff.

Я ответил на этот вопрос несколько дней назад, вторая половина ответа - это то, что вы ищете: Как добавить пользователя в группу из командной строки Mac OS X?

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

1 голос
/ 03 июля 2019

С Docker для Mac внутри контейнера вы обнаружите, что док-сокет принадлежит root (это часть встроенной виртуальной машины LinuxKit).Я использую следующую точку входа внутри моего контейнера Jenkins и запускаю точку входа от имени root, чтобы автоматически перенастроить группу докеров внутри контейнера для соответствия идентификатору группы файла сокета, а затем перейти от пользователя root к пользователю jenkins перед запуском Jenkins.само приложениеПреимущество в том, что он переносимый, может работать на любом настольном компьютере или сервере, без жесткого кодирования GID докера в контейнере:

#!/bin/sh

# By: Brandon Mitchell <public@bmitch.net>
# License: MIT
# Source Repo: https://github.com/sudo-bmitch/jenkins-docker

set -x

# configure script to call original entrypoint
set -- tini -- /usr/local/bin/jenkins.sh "$@"

# In Prod, this may be configured with a GID already matching the container
# allowing the container to be run directly as Jenkins. In Dev, or on unknown
# environments, run the container as root to automatically correct docker
# group in container to match the docker.sock GID mounted from the host.
if [ "$(id -u)" = "0" ]; then
  # get gid of docker socket file
  SOCK_DOCKER_GID=`ls -ng /var/run/docker.sock | cut -f3 -d' '`

  # get group of docker inside container
  CUR_DOCKER_GID=`getent group docker | cut -f3 -d: || true`

  # if they don't match, adjust
  if [ ! -z "$SOCK_DOCKER_GID" -a "$SOCK_DOCKER_GID" != "$CUR_DOCKER_GID" ]; then
    groupmod -g ${SOCK_DOCKER_GID} -o docker
  fi
  if ! groups jenkins | grep -q docker; then
    usermod -aG docker jenkins
  fi
  # Add call to gosu to drop from root user to jenkins user
  # when running original entrypoint
  set -- gosu jenkins "$@"
fi

# replace the current pid 1 with original entrypoint
exec "$@"

Вы можете найти полный пример, включая Dockerfile для установки докераи gosu внутри изображения, по адресу: https://github.com/sudo-bmitch/jenkins-docker

Та же концепция в сценарии fix-perms в моем базовом изображении, который может быть применен к другим сценариям: https://github.com/sudo-bmitch/docker-base

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...