A obtenu la permission refusée lors de la tentative de connexion au démon Docker prise à unix:///var/run/docker.chaussette
Je suis nouveau sur docker. J'ai juste essayé d'utiliser docker sur ma machine locale(Ubuntu 16.04) avec Jenkins.
J'ai configuré un nouvel emploi, ci-dessous pipeline script.
node {
stage('Build') {
docker.image('maven:3.3.3').inside {
sh 'mvn --version'
}
}
}
Mais il échoue avec l'erreur ci-dessous.
- est-il monolithique, Jenkins ou a un maître-esclave, le programme d'installation? Vérifiez auprès de l'utilisateur qui vous sont en cours d'exécution le docker inspecter commande. Voir si /var/run/docker.chaussette a RW accès à un groupe.
- Double Possible de a Obtenu la permission refusée lors de la tentative de connexion au démon Docker prise lors de l'exécution de panneau stop
Vous devez vous connecter pour publier un commentaire.
L'utilisateur
jenkins
doit être ajouté au groupedocker
:Puis redémarrez Jenkins.
Modifier
Si vous arrivez à cette question de débordement de pile, car vous recevez ce message de docker, mais vous n'utilisez pas de jenkins, plus probablement, l'erreur est la même: votre utilisateur non privilégié ne pas appartenir à l'docker groupe.
Que vous pouvez faire:
ou quel que soit votre nom d'utilisateur est.
Vous pouvez le vérifier à la fin de faire
cat /etc/group
et voyez une comme ceci:dans l'une des lignes.
Comme Ilya Kolesnikov est dit dans le commentaire, reconnectez-vous!
sudo usermod -a -G docker $USER
et de déconnexion ou de redémarrage. liennewgrp docker
plutôt dans la même session de terminal.service jenkins restart
résolu mon menu fixe socket problème lors du redémarrage du navigateur n'a pas.Ma première des solutions est:
Mais aucun d'eux ne fonctionne pour moi, j'ai essayé:
Qui fonctionne, mais je ne sais pas si c'est le bon appel.
docker.sock
fichier n'est pas la meilleure solution, il vous suffit d'exécuter lausermod
... instructions, et puis redémarrez votre système, sinon il ne prend pas effetPour moi, la réussite
J'ai ajouté le jenkins utilisateur root groupe et redémarré le jenkins et il a commencé à travailler.
2018-08-19
J'ai été coincé pendant des jours sur celui-ci et comme je n'ai pas trouvé une réponse complète avec le pourquoi et le comment, je vais en poster un pour d'autres gens qui trébuchent sur le même problème et des réponses à partir de ci-dessus ne fonctionnent pas.
Ce sont les 3 étapes cruciales lors de l'exécution de Jenkins à l'intérieur de docker:
/var/run/docker.sock
à l'jenkins conteneur afin d'être en mesure d'utiliser le menu fixe à partir de l'hôte.sudo usermod -a -G docker jenkins
afin d'ajouter jenkins pour le menu fixe du groupe. Cependant, ici, vous pourriez avoir un problème de permission si l'hôte docker et le conteneur docker n'ont pas le même id de groupe de sorte il est très important d'ajuster le conteneur docker du gid pour être le même que le docker gidVous pouvez faire cela comme une partie d'un script de lancement ou tout simplement en utilisant
exec
et de le faire manuellement:groupmod -g <YOUR_HOST_DOCKER_GID> docker
.Aussi, ne pas modifier les autorisations de l'
/var/run/docker.sock
en 777 ou des trucs comme ça parce que c'est un gros risque de sécurité.Espère que cette aide
J'ai Jenkins cours d'exécution dans le Panneau et connecté Jenkins est l'utilisation de Docker prise de la machine hôte Ubuntu 16.04 par le volume de /var/run/docker.la chaussette.
Pour moi la solution a été:
1) à l'Intérieur de conteneur Docker de Jenkins (
docker exec -it jenkins bash
sur la machine hôte)2) Sur la machine hôte:
664
moyen - lire et d'écrire(mais pas l'exécuter) pour les propriétaires et les utilisateurs du groupe.2019-02-16
La plupart des mesures ont été la même pour moi que les autres ont écrit.
Cependant, je n'étais pas en mesure d'ajouter jenkins pour le groupe de menu fixe à l'aide de usermod avec les solutions mentionnées.
J'ai essayé la commande suivante à partir de la docker hôte, et de la l'exécution de docker conteneur:
(Je suis entré à l' l'exécution de docker conteneur avec la commande suivante à partir de la docker hôte:
)
Reçu de docker hôte:
Reçu de conteneur docker:
Je n'ai pas connaître le mot de passe.
Sans
sudo
partie de la commande, dans le conteneur docker j'ai reçu:Solution:
Je suis entré à l' l'exécution de docker conteneur de la docker hôte avec la commande suivante:
Maintenant, je suis entré comme racine, et a émis la commande suivante:
Puis, à partir de la docker hôte, j'ai redémarré mon l'exécution de docker conteneur avec la commande suivante:
Après ça, j'ai commencé le jenkins travail et il a terminé avec succès.
Je n'ai utilisé que la racine utilisateur d'émettre le
usermod
de commande pour l'utilisateurjenkins
.Tout simplement ajoutant
docker
comme un groupe supplémentaire pour lajenkins
utilisateurn'est pas toujours suffisante lors de l'utilisation de Docker image de la Jenkins Agent. C'est, si votre
Jenkinsfile
commence avecpipeline{agent{dockerfile
oupipeline{agent{image
:C'est parce que Jenkins effectue une
docker run
de commande, qui résultats dans trois problèmes.docker run
ne fait pas de connexion au conteneur (c'est plus comme unsudo
).L'installation de Docker pour l'Agent
Faire le Docker programmes disponibles dans le Panneau de l'image tout simplement requiert l'exécution de la Menu fixe les étapes de l'installation dans votre Dockerfile:
Partage le démon Docker socket
Comme qui a été dit avant, fixant le deuxième problème de l'exécution de l'Jenkins Docker récipient de sorte qu'elle partage le démon Docker prise avec le démon Docker qui est à l'extérieur le conteneur. Si vous avez besoin de dire Jenkins pour exécuter le conteneur Docker avec qui le partage, donc:
Paramètre Uid et Gid
Le correctif idéal pour la troisième problème pourrait être mis en place de groupes fonctionnels de l'Agent. Cela ne semble pas possible. La seule solution, je suis conscient de l'est de l'exécution de l'Agent avec le Jenkins UID et le Docker GID (la prise pour le groupe de l'autorisation d'écriture et est détenue par
root.docker
). Mais en général, vous ne savez pas ce que ces Id sont (ils ont été attribués lors de lauseradd ... jenkins
etgroupadd ... docker
couru lors de Jenkins et Docker ont été installés sur l'hôte). Et vous ne pouvez pas simplement dire Jenkins à l'utilisateur l'utilisateurjenkins
et groupedocker
parce que que dit Docker à utiliser l'utilisateur et le groupe sont nommés
jenkins
etdocker
à l'intérieur de l'image, et votre Panneau de l'image n'est probablement pas lejenkins
d'utilisateur et de groupe, et même si elle n'a il n'y aurait aucune garantie qu'il aurait le même UID et le GID de l'hôte, et il en est de même aucune garantie que ledocker
GID est la mêmeHeureusement, Jenkins exécute le
docker build
de commande pour votre Dockerfile dans un script, vous pouvez faire un peu de shell-script magique pour passer à travers cette information en tant que Docker construire des arguments:Qui utilise le
id
commande pour obtenir le UID et GID de lajenkins
utilisateur et lestat
de commande pour obtenir des informations sur le Panneau support.Votre Dockerfile peut utiliser cette information pour l'installation d'un
jenkins
utilisateur etdocker
groupe pour l'Agent, à l'aide degroupadd
,groupmod
etuseradd
:Dans mon cas, il n'est pas seulement nécessaire d'ajouter
jenkins
utilisateur dedocker
groupe, mais de faire de ce groupe le groupe principal de l'jenkins
utilisateur.N'oubliez pas de reconnecter le jenkins nœud esclave ou redémarrer le serveur jenkins, tout dépend de votre cas.
2019-05-26
Cette a fonctionné pour moi !
Exemple docker-composer:
Peut-être que vous devez exécuter le menu fixe avec l'option "-u root" depuis le début,
Au moins qui a résolu mon problème
root
. Au moins, c'est ce qui m'est arrivé, avec Docker 18.06.1.