web-dev-qa-db-fra.com

Jenkins: impossible de se connecter au démon Docker

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

25
pcsram

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
34
lvthillo

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
3
S_intg

@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

3
Brent Fisher

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.

2
Bob

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.

https://github.com/docker/compose/issues/2816

1
theRemix