docker - 使用 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。
对此问题的任何帮助将不胜感激!
解决方案
似乎该 Jenkins 插件中存在错误。
您可以尝试删除多阶段构建名称(“ AS final
”,因为您不需要它):
FROM base
(....)
但是,如果您确实需要引用以前构建的图像(多阶段),则可以使用一种解决方法--copy-from 0
(0,1,2,因为它对应,而不是别名)
Jenkins 中的相关问题
- https://issues.jenkins-ci.org/browse/JENKINS-44789
- https://issues.jenkins-ci.org/browse/JENKINS-44609
- https://issues.jenkins-ci.org/browse/JENKINS-31507
编辑
在此处记录 OP 找到的解决方案:
我通过不使用 Jenkinsfile 管道文件,而是在 Jenkins 作业中执行一个 Shell 来执行 Docker 构建命令来完成这项工作。(docker build -t latest-build 。)
推荐阅读
- c++ - constexpr 函数中的 constexpr 常量?
- python - python scipy.interpolate.griddata 仅在 method='nearest' 中表现良好
- java - 在 Java 中组织多个线程执行器池中的总线程大小
- javascript - 将作为字符串发送的二进制数据转换为数组缓冲区
- embedded-linux - 无法使用 Yocto 为 ZCU104 构建映像
- javascript - 如何编辑css级联
- uber-api - react-map-gl-draw addFeatures 创建重复项
- mysql - 如何使用空列优化 MySQL 中的索引?
- node.js - Windows 10 上的 node-virtualcam npm 模块无法正常工作
- c# - 访问类的属性而不创建类的实例