jenkins和docker:没有指定uri

我已经在jenkins中安装了docker,jenkins和docker -build-step 。

我已经设置了一个步骤,以便从我的存储库的Dockerfile构build一个图像。

它将这个消息转储给我:

Started by BitBucket push by living_jordi Started by BitBucket push by living_jordi Building in workspace /var/lib/jenkins/workspace/Create Docker Images Cloning the remote Git repository Cloning repository git@bitbucket.org:livingdigital/docker-images.git > git init /var/lib/jenkins/workspace/Create Docker Images # timeout=10 Fetching upstream changes from git@bitbucket.org:livingdigital/docker-images.git > git --version # timeout=10 using GIT_SSH to set credentials BitBucket Private Key > git -c core.askpass=true fetch --tags --progress git@bitbucket.org:livingdigital/docker-images.git +refs/heads/*:refs/remotes/origin/* > git config remote.origin.url git@bitbucket.org:livingdigital/docker-images.git # timeout=10 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 > git config remote.origin.url git@bitbucket.org:livingdigital/docker-images.git # timeout=10 Fetching upstream changes from git@bitbucket.org:livingdigital/docker-images.git using GIT_SSH to set credentials BitBucket Private Key > git -c core.askpass=true fetch --tags --progress git@bitbucket.org:livingdigital/docker-images.git +refs/heads/*:refs/remotes/origin/* > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 Checking out Revision 058ecd67befe53fb5e4d18e8103b955a1daadbe3 (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f 058ecd67befe53fb5e4d18e8103b955a1daadbe3 First time build. Skipping changelog. 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:120) at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:204) at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:68) 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:534) at hudson.model.Run.execute(Run.java:1720) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:98) at hudson.model.Executor.run(Executor.java:410) Build step 'Execute Docker command' marked build as failure 

有任何想法吗?

编辑这是我的docker.serviceconfiguration文件与连接有关:

 ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock 

Docker正在收听:

 netstat -tupln | grep 4243 tcp 0 0 127.0.0.1:4243 0.0.0.0:* LISTEN 

我已经使用了Docker Builderconfiguration,并且已经将Docker URL设置为http://127.0.0.1:4243Test connection告诉我:

 Something went wrong, cannot connect to tcp://127.0.0.1:4243, cause: null 

我也使用这个命令curl -XGET http://localhost:4243/containers/json向API REST发出了一个请求,结果是正确的:

 [ { "Id":"27e79f6a504c5c5359630a30bc5c222b68bafaede774bd5462ac410dc0d34c36", "Names":[ "/registry" ], "Image":"registry:2", "ImageID":"sha256:8ff6a4aae6575dace6b603626816e74e71e93aa54dfb670daff0a7426706e58c", "Command":"/bin/registry serve /etc/docker/registry/config.yml", "Created":1467798010, "Ports":[ { "IP":"0.0.0.0", "PrivatePort":5000, "PublicPort":5000, "Type":"tcp" } ], "Labels":{ }, "State":"restarting", "Status":"Restarting (2) 10 hours ago", "HostConfig":{ "NetworkMode":"default" }, "NetworkSettings":{ "Networks":{ "bridge":{ "IPAMConfig":null, "Links":null, "Aliases":null, "NetworkID":"", "EndpointID":"4c5a73c2ca7b9aeeff2384e0182e7b83a53cd1e7a9efd5fa416bb8c009b60568", "Gateway":"172.17.0.1", "IPAddress":"172.17.0.2", "IPPrefixLen":16, "IPv6Gateway":"", "GlobalIPv6Address":"", "GlobalIPv6PrefixLen":0, "MacAddress":"02:42:ac:11:00:02" } } }, "Mounts":[ { "Source":"/root/docker-registry/certs", "Destination":"/certs", "Mode":"", "RW":true, "Propagation":"rprivate" }, { "Source":"/root/docker-registry/data", "Destination":"/var/lib/registry", "Mode":"", "RW":true, "Propagation":"rprivate" }, { "Source":"/root/docker-registry/auth", "Destination":"/auth", "Mode":"", "RW":true, "Propagation":"rprivate" } ] } ] 

当我点击Test Connection时,我也复制了日志信息。 消息是完全一样的,尽pipe我已经指定了uri:

 Jul 07, 2016 7:22:04 AM FINE org.jenkinsci.plugins.dockerbuildstep.DockerBuilder Trying to get client for http://127.0.0.1:4243 and version Jul 07, 2016 7:22:04 AM WARNING org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl 

doTestConnection

 uri was not specified 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 $在org.jenkinsci.plugins.dockerbuildstep.DockerBuilder $ DescriptorImpl.doTestConnection(DockerBuilder.java:在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect处使用sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)方法.invoke(Method.java:498)在org.kohsuke.stapler.Function $ InstanceFunction.invoke(Function.java:324)at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167)at org。 kohsuke.stapler.Function.bindAndInvokeAndServeRe org.kohsuke.stapler.MetaClass $ 1.doDispatch(MetaClass.java:124)在org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)org.kohsuke.stapler上的引用(Function.java:100)。 Stapler.tryInvoke(Stapler.java:746)at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)at org.kohsuke.stapler.MetaClass $ 5.doDispatch(MetaClass.java:233)at org.kohsuke。在org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)org.kohsuke上的订书机.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) .stapler.Stapler.invoke(Stapler.java:649)at org.kohsuke.stapler.service(Stapler.java:238)at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)at org。 eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)at org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1669)at hudson.util.PluginServletFilter $ 1.doFilter(PluginServletFilter.java :135)在hudson.util.PluginServletFilt org.eclipse.jetty.servlet.ServletHandler中的er.doFilter(PluginServletFilter.java:126)$ org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:80)at org .eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:84)at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)在hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)at org。在Hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)在org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMePro(AnonymousProcessingFilter.java:125) 在Hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)在org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)在hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter .java:87)at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java :249)at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)at org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)at org.kohsuke .http://www.facebook.com/default.aspx?subid=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1 )at org.eclipse.jetty.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)at org.eclipse.jetty.servlet.ServletHandler $ (org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)在org.eclipse.jetty.server.handler的org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)上的org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553) .ContextHandler.doHandle(ContextHandler.java:1127)在org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler。 java:515)org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)org.eclipse .jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)位于org.eclipse.jet.jet.server.Server.handle的org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) (Server.java:499)在org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)在org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)在org.eclipse。 jetty.io.AbstractConnection $ 2.run(AbstractConnection.java:544)at winstone.BoundedExecutorService $ 1.run(BoundedExecutorService.java:77)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)

随着jenkins版本2.51和docker版本1.13.1 ,您可以做以下解决这个问题。 首先将以下内容添加到ExecStart (在docker.service ):

 ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock 

然后去jenkins – >pipe理jenkins – >configuration系统 – >dockerbuild设者 。 您在此指定:

 tcp://127.0.0.1:4243 

作为Docker URL。 应用和testing连接。

我刚刚遇到这个问题。

对我来说,它是点击Advanced和设置Docker version1.11

快速浏览/var/log/jenkins/jenkins.log显示:

WARNING: client version 1.11 is too old. Minimum supported API version is 1.12, please upgrade your client to a newer version

删除它,点击应用/重新加载,然后Test connection工作。