Docker 使用多阶段构建 arm64 镜像时 buildx 挂起 Java
Docker buildx hangs when building image for arm64 using multi-stage Java build
我正在尝试为使用多阶段构建的 Spring 引导应用构建 arm64 Docker 映像。 buildx
或更确切地说 qemu
在使用 jar -xf ../*.jar
的解包步骤中挂起。 CPU 个核心之一使用 100%,进程无限运行。同时buildx
可以为我的非Java项目成功构建arm64镜像。这可能是由于 buildx、qemu、jar、我的应用程序或这些的任何组合中的某些原因。请分享如何调试这个的想法?
.Docker文件
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
很难说,但这可能是 alpine
版本 docker 图像可能存在的众多问题之一,here's python 也报告了类似的问题,因此它可能一样。
暂时推荐的方案是,如果体积比较笨重的话,使用debian版本的slim版本(openjdk:8-jdk-slim
)
我正在尝试为使用多阶段构建的 Spring 引导应用构建 arm64 Docker 映像。 buildx
或更确切地说 qemu
在使用 jar -xf ../*.jar
的解包步骤中挂起。 CPU 个核心之一使用 100%,进程无限运行。同时buildx
可以为我的非Java项目成功构建arm64镜像。这可能是由于 buildx、qemu、jar、我的应用程序或这些的任何组合中的某些原因。请分享如何调试这个的想法?
.Docker文件
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
很难说,但这可能是 alpine
版本 docker 图像可能存在的众多问题之一,here's python 也报告了类似的问题,因此它可能一样。
暂时推荐的方案是,如果体积比较笨重的话,使用debian版本的slim版本(openjdk:8-jdk-slim
)