【问题标题】:Docker: failed to export image: failed to create image: failed to get layerDocker:无法导出图像:无法创建图像:无法获取图层
【发布时间】:2018-12-09 11:34:33
【问题描述】:

我收到以下错误:

导出图片失败:创建图片失败:获取图层失败 sha256:xxxxxxxxxxxxxxx: 图层不存在

Dockerfile

FROM openjdk:8
COPY ./lib/ /usr/src/app/BOOT-INF/lib/
COPY ./lib/entities-1.0-SNAPSHOT.jar /usr/src/app/BOOT-INF/lib/entities-1.0-SNAPSHOT.jar
COPY ./app/ /usr/src/app/
WORKDIR /usr/src
CMD ["java", "-cp", "app/", "org.springframework.boot.loader.JarLauncher"]

输出

Step 3/6 : COPY ./lib/entities-1.0-SNAPSHOT.jar /usr/src/entities-1.0-SNAPSHOT.jar
 ---> 3acb1f6c911a
Step 4/6 : COPY ./app.jar /usr/src/app.jar
failed to export image: failed to create image: failed to get layer sha256:33a94c44f7804ae3f57b9e72f94323c15cef7267be7eb95d90d2a1673c4b33b9: layer does not exist

第二次运行总是有帮助 - 错误消失了。 我正在构建多个不同的图像(不同的 jar),在不同的目录中有不同的 Dockerfile。但是Dockerfiles的内容是一样的。

我认为这个错误是我添加后出现的:

COPY ./lib/entities-1.0-SNAPSHOT.jar /usr/src/app/BOOT-INF/lib/entities-1.0-SNAPSHOT.jar

我不想删除该行:应用程序和实体是我的库。如果我删除行 - 我将得到一层第三方库 (50mb) 与实体 (2mb) 合并。

【问题讨论】:

  • docker 版本?如果您查看官方 repo 中的 docker 错误,则会在此处进行描述。
  • @AlexKarshin Docker version 18.05.0-ce, build f150324782 能分享一下bug的链接吗? github.com/moby/moby/issues/36573 ?

标签: docker dockerfile


【解决方案1】:

在多阶段构建中,COPY 命令的特定序列会出现此问题。

更准确地说,当 COPY 指令产生 null 效果时(例如,如果复制的内容已经存在于目标中,差异为 0),然后立即另一个COPY 指令。

一种解决方法是在COPY 语句之间添加RUN true

COPY ./lib/ /usr/src/app/BOOT-INF/lib/
RUN true
COPY ./lib/entities-1.0-SNAPSHOT.jar /usr/src/app/BOOT-INF/lib/entities-1.0-SNAPSHOT.jar
RUN true
COPY ./app/ /usr/src/app/

另一种似乎可行的方法是使用BUILDKIT 启动构建,如下所示:

DOCKER_BUILDKIT=1 docker build --tag app:test .

见:https://github.com/moby/moby/issues/37965

【讨论】:

  • 你能解释为什么RUN true 有效吗?它显然对我有用。
  • DOCKER_BUILDKIT=1 有效。太好了,如果有人能解释为什么会这样,我们是否应该一直使用这个标志
  • RUN true 有效。有关更多详细信息,请参阅 github 中的链接问题。
【解决方案2】:

我收到了这个错误,但它没有告诉我任何信息。如果您希望它输出实际错误,请使用:

docker-compose -f "docker-compose.yml" up --remove-orphans --force-recreate' <optional service: e.g. "nginx">

发件人:

错误:服务“nginx”构建失败:导出图像失败:创建图像失败:获取层 sha256:63d3 失败...:层不存在

收件人:

正在创建 project_nginx ... 完成
附加到 project_nginx
nginx_1 | 2019/06/12 03:27:30 [emerg] 1#1: BIO_new_file("/etc/ssl/certs/dhparam.pem") 失败(SSL: error:02001002:system library:fopen:No such file or directory :fopen('/etc/ssl/certs/dhparam.pem','r') error:2006D080:BIOroutines:BIO_new_file:no such file)

从那里我可以找到实际问题。但是,从最初的错误来看,您无法知道究竟是什么导致了失败。

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2011-12-01
    • 2012-11-24
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多