Docker:无法导出图像:无法创建图像:无法获取图层

时间:2018-06-30 14:34:50

标签: docker dockerfile

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。但是Dockerfile的内容是相同的。

我认为在添加COPY ./lib/entities-1.0-SNAPSHOT.jar /usr/src/app/BOOT-INF/lib/entities-1.0-SNAPSHOT.jar之后出现了此错误。我不想删除该行:应用程序和实体是我的库。如果我删除行,则将第三方库(50mb)与实体(2mb)合并为一层。

2 个答案:

答案 0 :(得分:4)

在多阶段构建中,COPY命令的特定顺序会发生此问题。

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

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

答案 1 :(得分:0)

我收到此错误,但没有告诉我任何信息。如果希望它输出实际错误,请使用以下命令:

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:错误:02001002:系统库:fopen:无此类文件或目录:fopen('/ etc / ssl / certs / dhparam.pem','r')错误:2006D080:BIO例程:BIO_new_file:无此类文件)

从那里我可以找到实际的问题。但是,从原始错误开始,您将无法知道导致故障的真正原因。