2016-06-29 11 views
10

Ich verwende Jenkins und Docker auf einer CentOS-Maschine. Ich habe einen Jenkins-Job, der ein Github-Repo erstellt und ein Docker-Image erstellt. Wenn ich versuche, den Job laufen bekomme ich den Fehler:Jenkins: Ich kann keine Verbindung zum Docker-Daemon herstellen

+ 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

Dies ist tritt auf, obwohl ich habe jenkins meine Docker Gruppe im sudo usermod -aG docker jenkins hinzugefügt und meine Maschine neu gestartet. Wie behebe ich das? Bekomme ich nur den Fehler sudo: sorry, you must have a tty to run sudo

+0

Was Maschine 'sudo Service Docker Zustand': Rückkehr auf Centos? – lvthillo

+0

Es ist aktiv: 'sudo Service Docker Status Umleiten zu/bin/systemctl Status docker.service ● docker.service - Docker Application Container Motor Loaded: geladene (/usr/lib/systemd/system/docker.service ; aktiviert; Herstellervoreinstellung: deaktiviert) Aktiv: aktiv (läuft) seit Mi 2016-06-29 14:10:13 UTC; Vor 5h 40min vor Docs: https://docs.docker.com Haupt-PID: 24858 (Docker) Speicher: 30.1M' – pcsram

+0

Okay so weit ich verstehe: Jenkins läuft nicht innerhalb Docker? – lvthillo

Antwort

19

Nach der Installation von Jenkins und Docker

By the way, versuchen, wenn der Befehl sudo docker build -t myProject . ändern. Benutzer hinzufügen jenkins dockergroup

sudo gpasswd -a jenkins docker 

Edit (wie Sie haben) die folgende Datei

vi /usr/lib/systemd/system/docker.service 

Und diese Regel bearbeiten, um die API aussetzen:

ExecStart=/usr/bin/docker daemon -H unix:// -H tcp://localhost:2375 

Jetzt ist es Zeit, neu zu laden und starten Sie Ihren Docker-Daemon erneut.

systemctl daemon-reload 
systemctl restart docker 

Dann neu gestartet ich jenkins und ich konnte Docker Befehle als jenkins Benutzer in meinem jenkins Jobs

sudo service jenkins restart 
+2

Danke, das funktioniert. Nur neugierig, wie wirkt sich das Hinzufügen der TCP-Adresse zur ExecStart-Linie auf Docker und die Art, wie es mit Jenkins sprechen kann, aus? – pcsram

+1

Also kann Jenkins Docker nicht direkt aufrufen, obwohl es auf dem gleichen Rechner installiert ist? – pcsram

+11

Ich mag diese Antwort wirklich nicht. Sie haben der Welt auf Ihrer Build-Maschine 2375 eröffnet. Sie sollten dies zumindest in Ihrer Antwort bestätigen und darauf hinweisen, dass Benutzer sie hinter eine Firewall stellen sollten. Sie können auch den Bereich der IP-Adressen eingrenzen. Gibt es einen Grund, Verbindungen von überall zu akzeptieren? – mttdbrd

1

Eine weitere Option ist zeigen Sie Ihre Jenkins Docker Host ‚Unix auszuführen: /// var/run/Docker. socke '

Dies ist statt den eigentlichen Andock-Host zu laufen und es zu öffnen.

1

@lvthillo, Ihre Antwort ist gut, aber nicht genug. Sie müssen auch die Andockgruppe erstellen. Siehe Beitrag Installationsschritte für Dockerverwalten Docker als Nicht-Root-Benutzer https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

den Benutzer ausgeführt wird jenkins an die Docker Gruppe hinzuzufügen.

z. wenn Sie laufen Jenkins-Server unter dem jenkins Benutzer:

Schritt 1: Erstellen Docker Gruppe

sudo groupadd docker 

Schritt 2: Fügen Sie Ihre Benutzer auf die docker Gruppe:

sudo usermod -aG docker jenkins 

Schritt 3: Abmelden und Melden Sie sich wieder als Jenkins an und testen Sie dann:

Die docker Gruppe wird vom Docker-Daemon beim Start speziell für diesen Zweck behandelt. Jeder Benutzer in dieser Gruppe kann nun docker ohne sudo aufrufen. Benutze das vorsichtig.

https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface