Jenkins 사용자가 Docker unix 소켓에 액세스 할 수있는 권한이없는 이유는 무엇입니까?


9

Jenkins 작업이 Docker 명령을 실행할 수 있다고 생각하는 jenkins사용자를 docker그룹에 추가했습니다 . jenkins사용자로 전환하면 (수동으로) 작동하는지 확인할 수 있습니다.

ubuntu@hostname:~$ ps aux | grep java
jenkins   2210  9.5  7.5 1950316 292896 ?      Sl   00:01   1:00 /usr/bin/java -jar /data/jenkins/jenkins-1.586.war --httpPort=8080 -Xloggc:/var/log/jenkins/gc.log
ubuntu@hostname:~$ getent group docker
docker:x:999:jenkins
ubuntu@hostname:~$ ls -la /var/run/docker.*
-rw-r--r-- 1 root root   4 Oct 23 18:32 /var/run/docker.pid
srw-rw---- 1 root docker 0 Oct 23 18:32 /var/run/docker.sock
ubuntu@hostname:~$ sudo su -s /bin/bash jenkins
jenkins@hostname:/home/ubuntu$ docker ps
CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS              PORTS                     NAMES

그러나 Jenkins 빌드 / 작업 중에는 권한이 없습니다.

# Job log
Started by user Matt Wright
Building on master in workspace /data/jenkins/jobs/docker-base-images-build/workspace
[ssh-agent] Using credentials CI-jenkins
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent]   Java/JNR ssh-agent
[ssh-agent] Started.
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url git@github.com:<redacted>/docker-base-images.git # timeout=10
Fetching upstream changes from git@github.com:<redacted>/docker-base-images.git
 > git --version # timeout=10
using GIT_SSH to set credentials 
 > git fetch --tags --progress git@github.com:<redacted>/docker-base-images.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 83c4463e7195b412a3a803dd7338210c1a772f55 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 83c4463e7195b412a3a803dd7338210c1a772f55
 > git rev-list 83c4463e7195b412a3a803dd7338210c1a772f55 # timeout=10
[workspace] $ /bin/sh -xe /tmp/hudson5606381166745886966.sh
+ ./build.sh
Sending build context to Docker daemon 
2014/10/24 16:14:18 Post http:///var/run/docker.sock/v1.15/build?rm=1&t=<redacted>%2Fpython%3A3.4: dial unix /var/run/docker.sock: permission denied
Build step 'Execute shell' marked build as failure
[ssh-agent] Stopped.
Notifying upstream projects of job completion
Finished: FAILURE

Docker 1.3.0 및 Ubuntu 14.04.1과 함께 제공됩니다. 단서가 있습니까?


이 문제 와 관련 이있는 것 같습니다 . 재부팅하면이 문제가 해결되었습니다.
smilly92

재부팅해도 문제가 해결되지 않았습니다.
Matt W

1
Jenkins는 Jenkins 사용자의 기본 그룹 이외의 그룹을 삭제하는 것으로 보입니다. Jenkins 사용자로 쉘에서 id 명령을 실행하면 docker 그룹에 있음을 알 수 있지만 자유형 작업에서 id를 실행하면 Jenkins 사용자 만 표시됩니다. 아직 해결 방법을 찾지 못했습니다.
Joseph Mulloy

먼저 docker 그룹에 jenkins 사용자가 있는지 확인하십시오. 그런 다음 문제가있는 슬레이브가 마스터에 연결된 경우 연결을 끊었다가 다시 연결하십시오. 'jenkins 관리'/ '노드 관리'를 통해이를 수행하십시오.
arminmor

답변:


12

도커 유닉스 소켓에 jenkins 그룹 권한을 부여하면 문제가 해결된다고 생각합니다. 이 줄을 추가하여 구성 파일에서 docker daemon 시작 옵션을 구성하여 수정할 수 있습니다

DOCKER_OPTS=' -G jenkins'

우분투 /etc/default/docker에는 도커 구성 파일이 있습니다.


이것은 여전히 ​​우분투 16.04의 새로운 설치를위한 나의 해결책입니다
lead_brogrammer

1

groupsjenkins를 사용하여 명령을 실행하십시오 . 당신은 볼 수 있나요 docker그룹을? 그렇지 않은 경우 해당 Jenkins 슬레이브를 재부팅하십시오. 또는 Jenkins slave.jar 프로세스를 종료하십시오. ps aux | grep jenkins


위의 몇 단계를 수행 한 후, 마지막 작업은 jenkins 슬레이브를 다시 연결하는 것이 었습니다. 팁 고마워.
Dean Poulin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.