Warum hat der Jenkins-Benutzer möglicherweise keine Berechtigung zum Zugriff auf den Docker-Unix-Socket?

9

Ich habe den jenkinsBenutzer zur dockerGruppe hinzugefügt und gedacht, dass Jenkins-Jobs Docker-Befehle ausführen können. Wenn ich zum jenkinsBenutzer wechsle, kann ich überprüfen, ob es (manuell) funktioniert:

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

Während eines Jenkins-Builds / Jobs hat es jedoch keine Berechtigung:

# 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 [email protected]:<redacted>/docker-base-images.git # timeout=10
Fetching upstream changes from [email protected]:<redacted>/docker-base-images.git
 > git --version # timeout=10
using GIT_SSH to set credentials 
 > git fetch --tags --progress [email protected]:<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

Dies ist mit Docker 1.3.0 und Ubuntu 14.04.1. Irgendwelche Hinweise?

Matt W.
quelle
Scheint mit diesem Problem verbunden zu sein . Ein Neustart hat das für mich gelöst.
slm_92
Ein Neustart hat dies für mich nicht behoben.
Matt W
1
Es scheint, dass Jenkins andere Gruppen als die Hauptgruppe des Jenkins-Benutzers löscht. Wenn ich den Befehl id von einer Shell als Jenkins-Benutzer ausführe, sehe ich, dass er sich in der Docker-Gruppe befindet. Wenn ich jedoch id in einem Freestyle-Job ausführe, wird nur der Jenkins-Benutzer angezeigt. Ich habe noch nicht herausgefunden, wie ich das Problem beheben kann.
Joseph Mulloy
Stellen Sie zunächst sicher, dass Sie den Benutzer jenkins in der Docker-Gruppe haben. Wenn der Slave, mit dem Sie Probleme haben, mit dem Master verbunden ist, trennen Sie ihn und schließen Sie ihn erneut an. Tun Sie dies durch 'Jenkins verwalten' / 'Knoten verwalten'.
Arminmor

Antworten:

12

Ich denke, dass es das Problem löst, Jenkins Docker-Unix-Sockets Jenkins-Gruppenberechtigungen zu geben. Dies kann durch Konfigurieren der Startoptionen des Docker-Daemons in der Konfigurationsdatei durch Hinzufügen dieser Zeile geändert werden

DOCKER_OPTS=' -G jenkins'

In Ubuntu /etc/default/dockerbefindet sich die Docker-Konfigurationsdatei.

Eldos
quelle
Dies ist immer noch meine Lösung für
Neuinstallationen unter
1

Führen Sie den groupsBefehl mit Jenkins aus. Sehen Sie eine dockerGruppe? Wenn nicht, versuchen Sie, diesen Jenkins-Slave neu zu starten. Oder töten Sie einfach den Jenkins-Slave.jar-Prozess: ps aux | grep jenkins

Vanuan
quelle
Nachdem Sie einige der oben genannten Schritte ausgeführt hatten, bestand das letzte Stück, um es zum Laufen zu bringen, darin, den Jenkins-Sklaven wieder anzuschließen. Danke für den Tipp.
Dean Poulin