首页 > 解决方案 > 使用 Jenkins 管道构建 Docker 映像时如何解决“无法从 docker 检索 .Id”

问题描述

我正在使用 Jenkins 管道来构建 Dockerfile。

dockerfile 成功完成所有步骤,并创建了 docker 映像。

如图所示:

Step 16/19 : FROM base AS final
 ---> <id>
Step 17/19 : WORKDIR /app
 ---> Using cache
 ---> <id>
Step 18/19 : COPY --from=publish /app .
 ---> Using cache
 ---> <id>
Step 19/19 : ENTRYPOINT ["", "myapp.dll"]
 ---> Using cache
 ---> <id>
Successfully built cb3y81938e88
Successfully tagged myapp:latest

但是,在此之后,shell 失败并出现以下错误:

java.io.IOException: Cannot retrieve .Id from 'docker inspect base AS final'

尽管成功构建了 docker 映像,为什么它会抛出此错误?当我在本地机器上执行此操作时,命令在“成功标记 myapp:latest”时退出

我的 docker 版本是 18.03.1-ce。

对此问题的任何帮助将不胜感激!

标签: dockerjenkinsdockerfilejenkins-pipeline

解决方案


似乎该 Jenkins 插件中存在错误。

您可以尝试删除多阶段构建名称(“ AS final”,因为您不需要它):

FROM base
(....)

但是,如果您确实需要引用以前构建的图像(多阶段),则可以使用一种解决方法--copy-from 0(0,1,2,因为它对应,而不是别名)

Jenkins 中的相关问题


编辑

在此处记录 OP 找到的解决方案:

我通过不使用 Jenkinsfile 管道文件,而是在 Jenkins 作业中执行一个 Shell 来执行 Docker 构建命令来完成这项工作。(docker build -t latest-build 。)


推荐阅读