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



我收到以下错误:

无法导出图像:无法

创建图像:无法获取图层 SHA256:xxx

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( 合并的层。

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

更准确地说,当有一条COPY指令产生空效果时(例如,如果复制的内容已经存在于目标中,差异为 0(,紧跟另一条COPY指令时,就会触发 bug。

解决方法可能是在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

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

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:没有这样的文件(

从那里我可以追踪实际问题。 但是,从原始错误中,您无法知道实际导致故障的原因。

最新更新