2015-05-05 12 views
12

Ich versuche, das Docker-Plugin auf Jenkins zu verwenden, um eine Instanz eines vorhandenen Containers auszuführen. Docker Version 1.6.0, Build 4749651Verwendung von Docker-Plugin auf Jenkins -

I "erstellen Container" Eingetragen das Bild-ID für den Bildnamen und versucht, einen Host http://172.16.42.43:4243 und auch versucht, einen leeren Host ausgewählt haben. Ich erhalte diese Fehlermeldung:

ERROR: Build step failed with exception 
java.lang.NullPointerException: uri was not specified 
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204) 
    at com.github.dockerjava.core.DockerClientConfig$DockerClientConfigBuilder.withUri(DockerClientConfig.java:406) 
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.createDockerClient(DockerBuilder.java:123) 
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:201) 
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:71) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779) 
    at hudson.model.Build$BuildExecution.build(Build.java:205) 
    at hudson.model.Build$BuildExecution.doRun(Build.java:162) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537) 
    at hudson.model.Run.execute(Run.java:1744) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:98) 
    at hudson.model.Executor.run(Executor.java:374) 
Build step 'Execute Docker container' marked build as failure 

Kann mir jemand sagen, wie man es beheben? Wenn jemand dieses Plugin schon einmal benutzt hat, lass es mich bitte wissen, ob das jemals funktioniert hat.

Auch versucht, den "Docker Container ausführen" -> Container mit der angegebenen Container-ID starten, was zu dem gleichen Fehler führt.

Ein anderer Ansatz: Ich habe versucht, die Shell-Plug Execute in und ich bekomme diese Fehlermeldung:

+ docker start d023eec1ff34 
Post http:///var/run/docker.sock/v1.18/containers/d023eec1ff34/start: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS? 
time="2015-05-05T10:26:34-07:00" level=fatal msg="Error: failed to start one or more containers" 

Wenn ich an das Terminal gehen Sie einfach, wechseln Sie zu jenkins Benutzer und führen die Docker Befehl starten, es funktioniert gut. Wenn jemand weiß, wie man es auf diese Weise repariert, wäre das auch großartig.

+0

Docker-Version? Überprüfen Sie die Protokolle von Docker (es kann in /var/log/docker.log oder in /var/log/upstart/docker.log, je nach Betriebssystem), auch versuchen, den Docker-Daemon im Debug-Modus zu starten. siehe --debug = true docs.docker.com/reference/commandline/cli/#daemon – user2915097

+0

Kann dies sein, extrahieren von http://serverfault.com/questions/639459/why-might-the-jenkins-user-not -have-permission-to-access-the-docker-unix-socket0 \t Ich denke, geben Jenkins Gruppe Berechtigungen zu Docker Unix-Socket löst das Problem. Dies kann durch die Konfiguration der Startoptionen für den Docker-Dämon in der Konfigurationsdatei geändert werden, indem diese Zeile hinzugefügt wird. DOCKER_OPTS = '-G Jenkins' In ubuntu/etc/default/docker befindet sich die Andockkonfigurationsdatei. – user2915097

+0

Ich habe versucht, das zu den Jenkins Standard hinzuzufügen. Außerdem habe ich versucht, jenkins user zur Docker-Gruppe hinzuzufügen. Ich habe das auf 2 Maschinen ohne Glück gemacht. – max

Antwort

14

Unter der Annahme, Docker auf derselben Maschine ausgeführt wird, stellen Sie sicher, Docker zu laufen mit:

-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock

Dann auf verwalten Jenkins> Konfiguration> Configure System dann nach unten scrollen zu Docker Builder und im Docker Server REST-uRL eingeben http://localhost:4243

Edited: Ich hatte Docker ursprünglich angewiesen, auf 0.0.0.0 zu hören, das an alle IP-Adressen bindet und Verbindungen von außen zulassen kann, wenn die Firewall den Datenverkehr durchlässt. Also habe ich es aktualisiert, um stattdessen an die Loopback-Adresse zu binden. Auch die aktuelle Version der Dokumentation empfiehlt einen anderen Port, aber da Sie den Port manuell angeben, ist jeder Port geeignet.

+2

FYI 4243 ist der alte Docker-Daemon-Port, der offizielle 237 am Ende wurde – Alex

+1

Ich würde sehr empfehlen, tcp: //127.0.0.1 anstelle von 0.0.0.0 zu verwenden, da Sie wahrscheinlich docker nicht anbieten möchten zur Außenwelt. – Nitek

+0

Zu welchem ​​Befehl geben Sie diese Flags erneut? – jonalv

3

Sie benötigen Jenkins Benutzerberechtigungen geben Docker zu verwenden, es zu kaufen Gruppe zu Andockfenster Hinzufügen

laufen
sudo usermod -a -G docker jenkins