I've had a docker java slave running happily for a few weeks now but after adding the Cloudbees docker build environment plugin (may be a coincidence) it failed with this same issue, with one minor difference in that it included a hostname in the logs:
Modules changed, recalculating dependency graph
Established TCP socket on dockerhost:48877
maven32-agent.jar already up to date
maven32-interceptor.jar already up to date
maven3-interceptor-commons.jar already up to date
[opendata-common] $ /opt/jdk//bin/java -cp /opt/jenkins/maven32-agent.jar:/opt/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven_3/boot/plexus-classworlds-2.5.2.jar:/opt/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven_3/conf/logging jenkins.maven3.agent.Maven32Main /opt/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven_3 /opt/jenkins/slave.jar /opt/jenkins/maven32-interceptor.jar /opt/jenkins/maven3-interceptor-commons.jar dockerhost:48877
Exception in thread "main" java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at jenkins.maven3.agent.Maven32Main.main(Maven32Main.java:141)
at jenkins.maven3.agent.Maven32Main.main(Maven32Main.java:71)
ERROR: Failed to launch Maven. Exit code = 1
Whilst looking for other possible causes for this I found
JENKINS-29674
which stated:
This is by intention, maven job type won't work with a docker container as it open an arbitrary socket for communication between slave agent and maven process, which we can't discover at container launch time
So as the exception gave me a hostname & as this was using my own docker images (both jenkins server and slaves) I added as part of the slaves entrypoint script the following:
echo "127.0.0.1 dockerhost" >>/etc/hosts
Now this may be a fluke that it's working & I don't know where dockerhost is being defined (it's not in any of my config) but this may help in finding the underlying issue.
Environment details: This was with Jenkins 2.5 (first spotted with 2.3) and an SSH based slave, both running within separate docker images. My docker images that have this fix in are area51/jenkins:2.5 & area51/jenkins-slave:2.5
|