Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-31507

docker.build throw IOExceptions with some sources

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • docker-workflow-plugin
    • None
    • CloudBees Docker Workflow 1.2
      Workflow 1.10.1
      Jenkins 1.631
      centos7

      When we use some images like 'centos:centos7', 'nodesource/centos7:0.12.7' or 'nodesource/jessie:0.12.7', it throws an exception when try to inspect the Id from the source:

      Example:
      FROM nodesource/centos7:0.12.7

      RUN yum install -y epel-release
      RUN yum install -y npm

      Exception:
      Running: Record trace of a Docker image used in FROM
      Running: Allocate node : Body : End
      Running: Allocate node : End
      Running: End of Workflow
      java.io.IOException: Cannot retrieve .Id from 'docker inspect centos:centos7'
      at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:176)
      at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:114)
      at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:74)
      at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousStepExecution.start(AbstractSynchronousStepExecution.java:40)
      at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:136)
      at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:112)

      Thanks,
      Henrique

          [JENKINS-31507] docker.build throw IOExceptions with some sources

          J Knurek added a comment -

          I'm seeing a similar error, but I think the root cause in my case is different.

          My pipeline has the following:

              docker.withRegistry('https://quay.io', 'quay-robot') {
                  def imageName = "test/example:123"
                  def img = docker.build(imageName)
              }
           

          and the logs show this, (notice there is no space at all between the image name)
          Cannot retrieve .Id from 'docker inspecttest/example:123

          docker build -t test/example:123 .
          Sending build context to Docker daemon 25.35 MB
          
          Step 1 : FROM alpine:latest
           ---> 4a415e366388
          Step 2 : MAINTAINER 
          ...
          Step 6 : ENTRYPOINT /docker-entrypoint.sh
           ---> Running in 7a1c46850107
           ---> fb2dfcecf73a
          Removing intermediate container 7a1c46850107
          Successfully built fb2dfcecf73a
          [Pipeline] dockerFingerprintFrom
          Executing command: docker inspect -f {{.Id}} test/example:123 
          
          java.io.IOException: Cannot retrieve .Id from 'docker inspecttest/example:123'
              at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:192)
              at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:115)
              at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:75)
              at 
          

          I've settled on a work-around by doing:

                  sh "docker build -t ${imageName}  ."
                  def img = docker.image(imageName)
          

          J Knurek added a comment - I'm seeing a similar error, but I think the root cause in my case is different. My pipeline has the following: docker.withRegistry( 'https: //quay.io' , 'quay-robot' ) { def imageName = "test/example:123" def img = docker.build(imageName) }   and the logs show this, (notice there is no space at all between the image name) Cannot retrieve .Id from 'docker inspecttest/example:123 docker build -t test/example:123 . Sending build context to Docker daemon 25.35 MB Step 1 : FROM alpine:latest ---> 4a415e366388 Step 2 : MAINTAINER ... Step 6 : ENTRYPOINT /docker-entrypoint.sh ---> Running in 7a1c46850107 ---> fb2dfcecf73a Removing intermediate container 7a1c46850107 Successfully built fb2dfcecf73a [Pipeline] dockerFingerprintFrom Executing command: docker inspect -f {{.Id}} test/example:123 java.io.IOException: Cannot retrieve .Id from 'docker inspecttest/example:123' at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:192) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:115) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:75) at I've settled on a work-around by doing: sh "docker build -t ${imageName} ." def img = docker.image(imageName)

          Have the same.

          Failed with error
          java.io.IOException: Cannot retrieve .Id from 'docker inspectmicrosoft/dotnet:1.1.2-sdk AS build-env'
          at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:203)
          at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:119)
          at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:75)
          at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
          at hudson.security.ACL.impersonate(ACL.java:260)
          at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)
          Finished: FAILURE
          when doing

          def coreImage = docker.build("coremonolith:${env.BUILD_ID}")

          Dockerfile:
          FROM microsoft/dotnet:1.1.2-sdk AS build-env
          ENV ASPNETCORE_ENVIRONMENT Production
          COPY backend/ /app
          WORKDIR /app
          RUN dotnet restore && dotnet publish -c Release -o bin/published/
          WORKDIR /app/bin/published
          ENTRYPOINT dotnet backend.dll
           

          Dmytro Zhernosiekov added a comment - Have the same. Failed with error java.io.IOException: Cannot retrieve .Id from 'docker inspectmicrosoft/dotnet:1.1.2-sdk AS build-env' at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:203) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:119) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:75) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47) at hudson.security.ACL.impersonate(ACL.java:260) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Finished: FAILURE when doing def coreImage = docker.build( "coremonolith:${env.BUILD_ID}" ) Dockerfile: FROM microsoft/dotnet:1.1.2-sdk AS build-env ENV ASPNETCORE_ENVIRONMENT Production COPY backend/ /app WORKDIR /app RUN dotnet restore && dotnet publish -c Release -o bin/published/ WORKDIR /app/bin/published ENTRYPOINT dotnet backend.dll  

          Levon Saldamli added a comment - - edited

          I have the same problem when using an ARG in the FROM line, e.g.: 

          FROM $image_name:$version

          This worked fine though:

          FROM some_image_name:$version

          Using the workaround suggested by jknurek (thanks for the tip!).

           

          Levon Saldamli added a comment - - edited I have the same problem when using an ARG in the FROM line, e.g.:  FROM $image_name:$version This worked fine though: FROM some_image_name:$version Using the workaround suggested by  jknurek (thanks for the tip!).  

          YJ Hwang added a comment -

          Same here.

          I just removed the tab in front of the image name, then works. please patch this..

          YJ Hwang added a comment - Same here. I just removed the tab in front of the image name, then works. please patch this..

          Ray Saltrelli added a comment -

          I ran into this issue but in a slightly different way.

           
          FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
           
          ... yields ...
           
          java.io.IOException: Cannot retrieve .Id from 'docker inspect microsoft/dotnet:2.1-aspnetcore-runtime AS runtime'
          at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:220)
          at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:133)
          at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:85)
          at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
          at hudson.security.ACL.impersonate(ACL.java:290)
          at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)
          Finished: FAILURE
           
          The "AS runtime" was what was causing problems for me.  Fortunately it wasn't necessary so I deleted it.

          Ray Saltrelli added a comment - I ran into this issue but in a slightly different way.   FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime   ... yields ...   java.io.IOException: Cannot retrieve .Id from 'docker inspect microsoft/dotnet:2.1-aspnetcore-runtime AS runtime ' at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:220) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:133) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:85) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47) at hudson.security.ACL.impersonate(ACL.java:290) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Finished: FAILURE   The "AS runtime" was what was causing problems for me.  Fortunately it wasn't necessary so I deleted it.

          Brice Oliver added a comment -

          Thanks for the comment raysaltrelli.  That was exactly the issue I was running into also.  Removed the "AS <NAME>" from the FROM line (since I didn't the multi-stage name at that point).

          Brice Oliver added a comment - Thanks for the comment raysaltrelli .  That was exactly the issue I was running into also.  Removed the "AS <NAME>" from the FROM line (since I didn't the multi-stage name at that point).

          Similar issue here.

           

          Dockerfile:

          ARG VERSION=latest
          FROM repo-vp.development.ems:5000/emsys-adoptopenjdk11:$VERSION
          

          Jenkinsfile (declarative):

                    agent { 
                      dockerfile {
                        filename 'Dockerfile'
                        additionalBuildArgs "--build-arg VERSION=${env.JDK_VERSION}"
                        reuseNode true
                      }
                    }
          

          Error log:

          java.io.IOException: Cannot retrieve .Id from 'docker inspect repo-vp.development.ems:5000/emsys-adoptopenjdk11:$VERSION'
          	at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:220)
          	at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:133)
          	at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:85)
          	at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
          	at hudson.security.ACL.impersonate(ACL.java:290)
          	at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
          	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          	at java.lang.Thread.run(Thread.java:748)
          Finished: FAILURE
          
          

          I haven't found a workaround yet.

          Christian Ciach added a comment - Similar issue here.   Dockerfile: ARG VERSION=latest FROM repo-vp.development.ems:5000/emsys-adoptopenjdk11:$VERSION Jenkinsfile (declarative): agent { dockerfile { filename 'Dockerfile' additionalBuildArgs "--build-arg VERSION=${env.JDK_VERSION}" reuseNode true } } Error log: java.io.IOException: Cannot retrieve .Id from 'docker inspect repo-vp.development.ems:5000/emsys-adoptopenjdk11:$VERSION' at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:220) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:133) at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:85) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47) at hudson.security.ACL.impersonate(ACL.java:290) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang. Thread .run( Thread .java:748) Finished: FAILURE I haven't found a workaround yet.

          Jesse Glick added a comment -

          The workaround would be to avoid agent dockerfile. Run on a plain agent type and run docker commands explicitly from sh.

          Probably it would be best to deprecate FromFingerprintStep and its kin, since the fingerprints are not actually used anywhere, and remove their calls from Docker.groovy. Alternately, the fingerprinting steps could catch and log all exceptions, never failing.

          Jesse Glick added a comment - The workaround would be to avoid agent dockerfile . Run on a plain agent type and run docker commands explicitly from sh . Probably it would be best to deprecate FromFingerprintStep and its kin, since the fingerprints are not actually used anywhere, and remove their calls from Docker.groovy . Alternately, the fingerprinting steps could catch and log all exceptions, never failing.

          There is a PR solving this here: https://github.com/jenkinsci/docker-workflow-plugin/pull/162

          Could a maintainer take a look at it?

          david bensoussan added a comment - There is a PR solving this here: https://github.com/jenkinsci/docker-workflow-plugin/pull/162 Could a maintainer take a look at it?

          Some PRS got merged, the plugins got updated as well.

           

          https://github.com/jenkinsci/docker-workflow-plugin/pull/162

          https://github.com/jenkinsci/docker-workflow-plugin/pull/180 

           

          I've removed the workarounds from the codebase I saw this issue in, and builds are working as expected while using multi-stage Dockerfiles. 

           

          Would recommend closing this issue.

          Avindra Goolcharan added a comment - Some PRS got merged, the plugins got updated as well.   https://github.com/jenkinsci/docker-workflow-plugin/pull/162 https://github.com/jenkinsci/docker-workflow-plugin/pull/180     I've removed the workarounds from the codebase I saw this issue in, and builds are working as expected while using multi-stage Dockerfiles.    Would recommend closing this issue.

            jglick Jesse Glick
            henamaral Henrique Amaral
            Votes:
            19 Vote for this issue
            Watchers:
            26 Start watching this issue

              Created:
              Updated: