J'exécute Jenkins et Docker sur une machine CentOS. J'ai un travail Jenkins qui tire un dépôt Github et crée une image Docker. Lorsque j'essaie d'exécuter le travail, j'obtiens l'erreur:
+ docker build -t myProject . Cannot connect to the Docker daemon. Is the docker daemon running on this host? Build step 'Execute Shell' marked build as failure Finished: FAILURE
Cela se produit même si j'ai ajouté jenkins à mon groupe d'utilisateurs docker via Sudo usermod -aG docker jenkins
et redémarré ma machine. Comment puis-je réparer ça?
Au fait, si essayez de changer la commande en Sudo docker build -t myProject .
Je reçois juste l'erreur Sudo: sorry, you must have a tty to run Sudo
Après l'installation de Jenkins et Docker. Ajouter un utilisateur jenkins à dockergroup (comme vous l'avez fait)
Sudo gpasswd -a jenkins docker
Modifiez le fichier suivant
vi /usr/lib/systemd/system/docker.service
Et modifiez cette règle pour exposer l'API:
ExecStart=/usr/bin/docker daemon -H unix:// -H tcp://localhost:2375
Il est maintenant temps de recharger et de redémarrer votre démon Docker
systemctl daemon-reload
systemctl restart docker
Ensuite, j'ai redémarré jenkins et j'ai pu exécuter des commandes docker en tant qu'utilisateur jenkins dans mes travaux jenkins
Sudo service jenkins restart
J'ai eu le même problème avec Jenkins.
Je l'ai corrigé en ajoutant / var/run/docker.sock: /var/run/docker.sock sur docker-compose.yml:
jenkins:
container_name: jenkins
build: "jenkins/"
ports:
- "8080:8080"
environment:
- Java_OPTS:-Djava.awt.headless=true
volumes:
- /var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
@lvthillo, votre réponse est bonne, mais pas suffisante. Vous devez également créer le groupe docker. Voir Étapes de post-installation pour Docker Gérer Docker en tant qu'utilisateur non root https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user
pour ajouter l'utilisateur exécutant jenkins au groupe docker.
Par exemple. si vous exécutez le serveur Jenkins sous l'utilisateur jenkins
:
Étape 1: créer un groupe Docker
Sudo groupadd docker
Étape 2: ajoutez votre utilisateur au groupe docker
:
Sudo usermod -aG docker jenkins
Étape 3: Déconnectez-vous et reconnectez-vous en tant que jenkins, puis testez:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Le groupe docker
est traité spécialement par le démon docker au démarrage à cette fin. Tout utilisateur de ce groupe peut désormais appeler docker sans Sudo. Utilisez-le avec précaution.
https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
Une autre option consiste à pointer votre hôte Docker Jenkins vers 'unix: ///var/run/docker.sock'
C'est au lieu d'exécuter l'hôte Docker réel et de l'ouvrir.
Vous ne pouvez pas utiliser myProject
comme nom de balise. le nom et la balise de l'image doivent être en minuscules.
invalid argument "myProject" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
See 'docker build --help'.
si vous utilisez docker-compose, vous verrez une erreur trompeuse
Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_Host environment variable.