Permission refusée à Jenkins

Bonjour à tous,
Pour faire simple je possède un repo github que j’ai connecté à Jenkins2 pour du déploiement :slight_smile:

Ma config : Debian 9 Stretch + Jenkins 2 + Docker

Le tout est en local (pour l’instant). Néanmoins lorsque j’essaie de lancer ma commande pour le build de l’image docker Jenkins me retourne ceci :

Commande executée par Jenkins : docker build -t solene/installtv2 .

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.30/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&shmsize=0&t=solene%2Finstalltv2&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied

script returned exit code 1  

Je n’arrive pas à comprendre pourquoi :confused:
Si besoin d’info supplémentaire que j’ai oublié je m’excuse :confused:

Le but est de faire en sorte que Jenkins puisse tester de la validité de ce build d’image Docker. Pour ensuite lancer un container Docker !

Merci de votre aide !!

Pour pouvoir avancer dans mes recherches en attendant j’ai fait

chmod 777 /var/run/docker.sock
Mais c’est la méthode “bourine” qui me plait pas des masses.

Si quelqu’un d’autre a une piste ?

:slight_smile:

Que donne :
ls -l /var/run

bonsoir,
sans garantie:
docker build --build-arg …

jamais de chmod 777 755 au maximun
c’est bien sous root ou sudo docker build --help

la commande accepte aussi les mêmes options de configuration des ressources que pour les commandes run ou create
docker buid -t nginxhello

Je ne connais pas docker. @Clochette: oui.
Mais si c’est comme pour les droits liés au serveur web, assures-toi que le répertoire ‘docker’ est les droits utilisateur:groupe lié à docker.

Dans ce cas-là, normalement, les droits en écriture 0705 devrait suffire, voire 0755, et non pas 0777, que tu sais être dangereux par la possibilité que tout le monde puisse écrire dessus.

quant au fichier *.sock, il devrait être possible de ne le faire tourner qu’avec des droits 0660.

Mais ça, c’est normalement pour du web+php… il y a peut-être une différence de fonctionnement intrinséque à docker, mais je serais surpris.

1 J'aime

Re-bonjour,
Désolée de ce retard de réponse je vous transmet toute les infos :

–> lrwxrwxrwx 1 root root 4 juil. 11 16:03 /var/run -> /run

–> Oui normalement, mais dans ma config’ j’ai autorisé mon utilisateur “courant” (solene) a pouvoir utiliser les commandes Docker :slight_smile:
Par exemple quand je lance la commande en local depuis un terminal tout ce qu’il y a de plus normal, le build se lance parfaitement. ( Sans passer par Jenkins du coup, l’erreur n’est que lorsque c’est Jenkins qui essaie de lancer les builds sous mon user )

–> Je vais modifier ça en 0705 ou 0755 et voir ce que ça donne :slight_smile:

–> Dans la mesure ou je suis encore dans ma phase de test je peux me permettre des essaies alors go voir ce que ça donne avec ces para là !

Merci :smiley: Je test tout ça et je reviens vous donner le retour !

Alors, alors … :

@PengouinPdt
–> J’ai testé ce que tu m’as dis ( modifications des droits etc… ).
Etonnement, seul le chmod 777 autorise mon build d’image, tout les autres me renvois la même erreur [quote=“Sowlene, post:1, topic:74184”]
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.30/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&shmsize=0&t=solene%2Finstalltv2&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied

script returned exit code 1
[/quote]

Voilà, voilà :confused:

Si quelqu’un d’autre a une idée !

Cela laisse à penser à un problème de droit de l’utilisateur ça.

Pour que Jenkins puisse gérer les build il faut impérativement que l’utilisateur est les droits nécessaire sur le répertoire et sur le socket.

Tente d’ajouter l’utilisateur Jenkins au groupe docker (si et seulement tu as proprement isolé docker pour qu’il se lance en tant qu’utilisateur docker ^^ bien entendu).

Regarde de ce côté : https://blog.netapsys.fr/docker-et-jenkins-dans-un-bateau/

Pour rappel j’utilise le CI de Gitlab pas de Jenkins, du coup je ne pourrais t’aider beaucoup plus loin :confused:

1 J'aime

De toute façon, il est impensable de laisser /var/run ouvert à tous vents.

1 J'aime

–> Hop (si je ne me trompe pas ^^) : sudo usermod -g docker jenkins

Je suis bien d’accord sur ce point !

Je vais retenter maintenant que j’ai ajouté Jenkins au groupe Docker. :slight_smile:

Edit :
J’ai donc fait

  • sudo chmod -R +rx /var/run/docker.sock Pour n’avoir que les autorisations nécessaires (corrigés moi si je me trompe hein ^^)
    --> srwxrwxrwx 1 root docker 0 août 16 09:07 docker.sock

  • sudo usermod -g docker jenkins Pour ajouter mon user Jenkins au groupe Docker !

Je passe en test !:pray:

Je me rend compte que c’est le cas sur beaucoup de machine chez moi du coup, est-ce vraiment un problème ?
Je ne m’en était jamais inquiétée pourtant je fais attention aux autorisations etc.

@Clochette
Du coup si la commande :

Que j’ai faite te semble juste alors cela fonctionne mais je ne suis pas sûre que ce soit les bonnes autorisations :confused: Comment puis-je vérifier ?

Je ne pratique pas Docker, donc je ne sais pas si c’est spécial comme droits mais ça m’étonnerait fortement qu’il faille donner 777.
D’ailleurs, ces droits sont exceptionnels, je n’ai aucun fichier/dossier chez moi qui les a.
À mon avis, il faudrait que tu pratiques à tâtons en commençant par réduire le seul fichier docker.sock.
je commencerais par lui donner 555 et tester si ça répond.
le seul fichier avec extension .sock que j’ai dans /var/run est en 555.
Ensuite, si ça ne fonctionne pas, tu montes à 755, mais pas plus haut.
Attends quand même l’avis de ceux qui pratiquent Docker.
Ils peuvent vérifier sur leur machine ce qui passe bien.

Je vais quand même tester ce que tu me conseilles :slight_smile:

  • chmod 555

$ sudo chmod 555 /var/run/docker.sock
–> Test du script par Jenkins2
$ Running shell script

docker build -t solene/installtv2 .

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.30/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&shmsize=0&t=solene%2Finstalltv2&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied

script returned exit code 1
  • chmod 755

      Running shell script
      docker build -t solene/installtv2 .
    
      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.30/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&shmsize=0&t=solene%2Finstalltv2&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied
    
      script returned exit code 1
    

*chmod -R +rx

sudo chmod -R +rx /var/run/docker.sock

Running shell script

docker build -t solene/installtv2 .

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.30/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&shmsize=0&t=solene%2Finstalltv2&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied

script returned exit code 1

Voilà ou j’en suis finalement :confused:
Actuellement :

ls -lhS | grep .sock
srwxr-xr-x 1 root docker 0 août 16 09:07 docker.sock

et

ls -l /var/run
lrwxrwxrwx 1 root root 4 juil. 11 16:03 /var/run -> /run

(Bien-sûr en 777 cela fonctionne --’)

Et en 770 ?

Sinon, tu es sûr que ça doit être root:root ?
Sur mon serveur distant, j’ai certains trucs qui tournent avec root:wdata-wdata
Difficile d’aider quand on ne connait pas le soft dont il est question.

chmod 770 /var/run/docker.sock
ls -lhS /var/run/ | grep .sock
srwxrwx---  1 root     docker        0 août  17 09:09 docker.sock

–> Exécution de mon script dans Jenkins : OK

Du coup avec 770 ça fonctionne !

[quote=“ricardo, post:15, topic:74184”]
Sinon, tu es sûr que ça doit être root:root ?
[/quote] – > Non, je n’en suis pas sûre :confused:

[quote=“ricardo, post:15, topic:74184”]
Difficile d’aider quand on ne connait pas le soft dont il est question.
[/quote] --> Tu veux dire ce dont je fait le build dans mon image Docker ?