我正在尝试为一个使用多阶段构建的Spring Boot应用程序构建一个arm64 Docker镜像。buildx
,或者更确切地说,qemu
在使用jar -xf ../*.jar
的解包步骤中挂起。其中一个CPU核心使用100%,该进程无限运行。同时,buildx
可以成功地为我的非arm64项目构建Java镜像。这可能是由于buildx、qemu、jar、我的应用程序中的某些内容,或者它们的任意组合造成的。请分享一下如何调试这个的想法?
.Dockerfile
FROM openjdk:8-jdk-alpine as build
WORKDIR /workspace/app
COPY build/libs/*.jar .
RUN mkdir -p unpacked && (cd unpacked; jar -xf ../*.jar) # <-- this is where qemu hangs
# Multi-stage build to split the dependencies and the app code into different layers
FROM openjdk:8-jdk-alpine
...etc ... these stage is not reached at all
构建镜像的命令:docker buildx build --platform linux/arm64,linux/amd64 -t mytag . --push
在标准输出中,这一行被无限地执行:
[linux/arm64 build 4/4] RUN mkdir -p unpacked && (cd unpacked; jar -xf ../*.jar)
我看到进程正在运行:
ps aux | grep jar
root 21965 99.9 0.0 201144 12928 ? Ssl 23:10 39:06 /usr/bin/qemu-aarch64 /usr/lib/jvm/java-1.8-openjdk/bin/jar -xf ../myjar-0.0.1-SNAPSHOT.jar
发布于 2021-09-10 18:56:08
很难说,但这可能是alpine
版本化docker图像可能存在的许多问题之一,here's报告了一个类似的问题,所以它可能是相同的。
目前,推荐的解决方案是使用瘦版本的debian版本(openjdk:8-jdk-slim
),如果它的大小很笨重的话。
https://stackoverflow.com/questions/69128702
复制相似问题