簡體   English   中英

Jenkins 和 docker:未指定 uri

[英]Jenkins and docker: uri was not specified

我已經在 jenkins 中安裝了 docker、jenkins 和 docker -build-step

我已經設置了一個步驟,以便從我的存儲庫的 Dockerfile 構建圖像。

它向我轉儲了這條消息:

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.service 配置文件:

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 Builder配置,並將Docker URL設置為http://127.0.0.1:4243 Test 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時,我還復制了日志信息。 盡管我指定了 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$DescriptorImpl.createDockerClient(DockerBuilder.java:120)
  at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:204)
  at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.doTestConnection(DockerBuilder.java:138)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)   
  at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:324)
  at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167)  
  at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:100)
  at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:124)     
  at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
  at org.kohsuke.stapler.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.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
  at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)    
  at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)   
  at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)   
  at org.kohsuke.stapler.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)
  at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126)
  at 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)
  at 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.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
  at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
  at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
  at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
  at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
  at 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.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
  at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
  at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
  at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
  at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
  at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
  at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
  at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
  at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
  at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
  at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
  at org.eclipse.jetty.server.Server.handle(Server.java:499)    
  at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)  
  at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
  at 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)

隨着詹金斯版本2.51和泊塢窗版本1.13.1 ,你可以做來解決這個問題如下。 首先將以下內容添加到ExecStart (在docker.service ):

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

然后轉到Jenkins-> Manage Jenkins-> Configure system-> Docker builder 在此指定:

tcp://127.0.0.1:4243

作為Docker URL。 應用並測試連接。

Docker-build-step插件不會自動使用本地docker安裝。

*您必須手動配置*

如在其他答案中所提到的,您無需為啟用Docker端點的tcp做伏都教,您只需使用套接字路徑即可。

Manage Jenkins/Configure System/Docker Builder您將看到Docker URL選項留為空白。 用unix套接字URL unix:///var/run/docker.sock填充它。 那應該解決問題。

[配置docker-build-step插件網址

我剛遇到這個問題。

對我來說,它是單擊Advanced並將Docker version設置為1.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

如果您將 Jenkins 作為 docker 容器運行。

檢查你是否有掛載

/var/run/docker.sock:/var/run/docker.sock/usr/bin/docker:/usr/bin/docker

然后編輯Docker builder -> Docker URL

unix:///var/run/docker.sock

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM