-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
CloudBees Docker Workflow 1.2
Workflow 1.10.1
Jenkins 1.631
centos7
-
Powered by SuggestiMate
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
Hi Jesse, it worked when you run with the terminal, only fails when you run from the workflow-docker-plugin.
The docker version is: 1.8.3
Interesting, should just be running that command internally. Will check if I can reproduce. Do you have only one version of Docker installed on the system?
Yes, I have only one version running in a CentOS 7 and the CentOS is a jenkins slave.
I just got the same issue building from centos:centos7 on a Jenkins slave:
java.io.IOException: Cannot retrieve .Id from 'docker inspect[REPO] -t [TAG]'
at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:184)
at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:116)
at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:76)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousStepExecution.start(AbstractSynchronousStepExecution.java:40)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:178)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:124)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:117)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:16)
Any workaround for this?
I have just run into this problem. I have several projects that all use the same function to build a docker image. The one I set up a few minutes ago is throwing this same exception. The other projects seem to build fine.
java.io.IOException: Cannot retrieve .Id from 'docker inspect gpuwa-docker.nvidia.com/java:8u102-1.1.0' at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:190) 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:52) at hudson.security.ACL.impersonate(ACL.java:221) at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:49) 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:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
The extra whitespace looks suspicious, perhaps you have FROM␣␣␣␣something? As usual, a self-contained, minimal, reproducible test case would expedite a fix (as well as possibly make a workaround obvious).
I got exactly same issue as @Bryan I have a base image and several dependent images use this base to build. One of them is consistently throwing this error, others are good.
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.io.IOException: Cannot retrieve .Id from 'docker inspect ******/atlas_base'
at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:184)
at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:120)
at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:76)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousStepExecution.start(AbstractSynchronousStepExecution.java:40)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:157)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:117)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:117)
at groovy.lang.GroovyObject$invokeMethod$1.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
I looked at this failure code at https://github.com/jenkinsci/docker-workflow-plugin/blob/master/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java and ran the inspect command from command line as the code does. This works
- docker inspect -f=".Id" *****/atlas_base
sha256:336e0afe9988898976f28db21baf804af4dfff66a8d94ec3c372f459f8729d25
I got my build to work. In my case, my Dockerfile looked like:
FROM gpuwa-docker.nvidia.com/java:8u102-1.1.0 MAINTAINER Bryan Hunt ...
Changing the Dockerfile as shown below worked.
FROM gpuwa-docker.nvidia.com/java:8u102-1.1.0 MAINTAINER Bryan Hunt ...
So possibly this just needs a .trim(); should be easy enough to reproduce in a functional test.
My issue was fixed. Just trimmed the space between FROM <base_image> to FROM <base_image>
{single space between FROM and image name}Thanks!!
Same issue here, any plan for fixing this? Dockerfile usually will be formatted using this tabs and spaced for better looking
I've seen the same problem and resolution. This is definitely a bug. I never would have figured out how to resolve this if I didn't see this bug report.
same for me
Multi space between FROM and image name on Dockerfile
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
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!).
Same here.
I just removed the tab in front of the image name, then works. please patch this..
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.
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.
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?
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.
Hmm,
works for me. What does docker version say? Do you have a self-contained script to reproduce?