¿Por qué el usuario de Jenkins no tiene permiso para acceder al zócalo Docker unix?

9

Agregué al jenkinsusuario al dockergrupo pensando que permitiría a los trabajos de Jenkins ejecutar comandos Docker. Si cambio al jenkinsusuario, puedo verificar que funciona (manualmente):

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

Sin embargo, durante una compilación / trabajo de Jenkins no tiene permiso:

# 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

Esto es con Docker 1.3.0 y Ubuntu 14.04.1. ¿Alguna pista?

Matt W
fuente
Parece relacionado con este problema . Reiniciar me resolvió esto.
smilly92
Reiniciar no resolvió esto por mí.
Matt W
1
Parece que Jenkins elimina otros grupos además del grupo principal de usuarios de Jenkins. Cuando ejecuto el comando id desde un shell como usuario de Jenkins, veo que está en el grupo acoplable, pero cuando ejecuto id en un trabajo de estilo libre, solo muestra al usuario de Jenkins. Todavía no he descubierto cómo solucionarlo.
José Mulloy
Primero asegúrese de tener el usuario jenkins en el grupo docker. Luego, si el esclavo con el que tiene problemas está conectado al maestro, desconéctelo y luego vuelva a conectarlo. Haga esto a través de 'administrar jenkins' / 'administrar nodos'.
Arminmor

Respuestas:

12

Creo que otorgar privilegios de grupo jenkins al conector Docker Unix resuelve el problema. Esto se puede modificar con la configuración de las opciones de inicio de Docker Daemon en el archivo de configuración agregando esta línea

DOCKER_OPTS=' -G jenkins'

En ubuntu /etc/default/dockeres el archivo de configuración del cargador de muelle.

eldos
fuente
Esta sigue siendo mi solución para nuevas instalaciones en Ubuntu 16.04
lead_brogrammer
1

Ejecute el groupscomando con jenkins. ¿Ves un dockergrupo? Si no, intente reiniciar ese esclavo Jenkins. O simplemente elimine el proceso Jenkins slave.jar: ps aux | grep jenkins

Vanuan
fuente
Después de hacer algunos de los pasos anteriores, la pieza final para que funcionara era volver a conectar al esclavo jenkins. Gracias por el consejo.
Dean Poulin