web-dev-qa-db-fra.com

Comment résoudre l'erreur de permission de Docker lors du déclenchement par Jenkins

Mon Jenkins n'est pas exécuté dans le conteneur Docker, il s'agit simplement d'une installation traditionnelle sur VPS. J'ai eu l'erreur suivante lors de l'exécution d'un simple projet test . J'utilise Ubuntu 14, Java 7 et Jenkins stable. J'ai essayé toutes les méthodes que je peux trouver sur Google, mais je ne peux pas le faire fonctionner. 

J'essaie d'exécuter ce shell

docker build --pull=true -t nick/hello-jenkins:$GIT_COMMIT .

Après le changement de code. 

Voici l'erreur: 

Got permission denied while trying to connect to the Docker daemon socket at unix: ....

Started by user nicolas xu
Building in workspace /var/lib/jenkins/workspace/hello-Jenkins
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.Origin.url https://github.com/nicolasxu/hello-nick-jenkins.git # timeout=10
Fetching upstream changes from https://github.com/nicolasxu/hello-nick-jenkins.git
 > git --version # timeout=10
 > git fetch --tags --progress https://github.com/nicolasxu/hello-nick-jenkins.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 d94ae21a8a2cf58ffc790dcad15bd851fb17df5a (refs/remotes/Origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f d94ae21a8a2cf58ffc790dcad15bd851fb17df5a
 > git rev-list d94ae21a8a2cf58ffc790dcad15bd851fb17df5a # timeout=10
[hello-Jenkins] $ /bin/sh -xe /tmp/hudson5076309502904684976.sh
+ docker build --pull=true -t nick/hello-jenkins:d94ae21a8a2cf58ffc790dcad15bd851fb17df5a .
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.27/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&pull=1&rm=1&shmsize=0&t=nick%2Fhello-jenkins%3Ad94ae21a8a2cf58ffc790dcad15bd851fb17df5a&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied
Build step 'Execute Shell' marked build as failure
Finished: FAILURE

Je peux exécuter «Docker» dans la console en tant que racine sans problème, pourquoi Jenkins ne peut pas essayer une commande Shell qui exécute «Docker» Que se passe-t-il? Complètement perdu.......

11
Nicolas S.Xu

Dans votre terminal de serveur VPS, procédez comme suit pour ajouter votre utilisateur Jenkins au groupe de menus fixes:

Sudo usermod -aG docker jenkins

Puis redémarrez votre serveur jenkins pour actualiser le groupe.

Tenez compte de tout problème de sécurité que cela pourrait engendrer:

Avertissement: le groupe de menus fixe accorde des privilèges équivalents à l'utilisateur root. Pour plus d'informations sur l'impact de cette modification sur la sécurité de votre système, voir Surface d'attaque du démon Docker.

Reportez-vous à la docs


Edit (mentionné par @iger): Assurez-vous simplement de redémarrer Jenkins en ligne de commande (c'est-à-dire que le service Sudo jenkins est redémarré), mais pas via le point de terminaison reste (http: /// restart)

19
Robert
  1. Ajoutez un utilisateur au groupe de menus comme il est décrit ici .
  2. Démarrer Jenkins avec cette commande: docker run -d -u root --restart on-failure -p "8080:8080" -p "50000:50000" -v $PWD/jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

root utilisateur requis car sans cela, vous ne pourrez pas exécuter de tâche racine, exemple: apk update && apk install ... 

0
Denys Bushulyak