gre*_*ter 7 java jvm docker alpine-linux apple-m1
我们有一个在 Docker 容器中运行的 Java Spring Boot 应用程序。它基于 openjdk:13-jdk-alpine。我们将其部署到 Linux 计算机上,但我们也可以在 Windows 计算机以及基于 Intel 的 iMac 上本地运行它。
但我们发现它无法在基于 ARM 的 MacBook Pro 上正常运行。我们得到的异常是基本的 Java 错误,例如“找不到符号 Java.class[]”,以及其他看起来 JVM 已关闭的错误。
有没有办法构建一个适用于所有这些平台(包括 M1 MacBook Pro)的 Docker 映像?
我使它与下图一起工作。我拉了图像
docker pull bellsoft/liberica-openjdk-alpine-musl:17
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile
:
FROM bellsoft/liberica-openjdk-alpine-musl:17
ADD build/libs/app-0.0.1-SNAPSHOT-plain.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
Run Code Online (Sandbox Code Playgroud)
现在docker build
命令起作用了
我的 M1 MacBook 上的 Java 容器也有很多问题。对于您的问题,也许您需要创建自己的 docker 映像:
Dockerfile
FROM --platform=linux/arm64/v8 ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
EXPOSE 8080
RUN apt update \
&& apt upgrade -y \
&& apt install -y openjdk-13-jre git \
&& apt clean
RUN mkdir -pv /app && cd /app && \
git clone https://github.com/spring-guides/gs-spring-boot.git && \
cd /app/gs-spring-boot/initial && ./gradlew build
WORKDIR /app/gs-spring-boot/initial
ENTRYPOINT [ "./gradlew", "bootRun" ]
Run Code Online (Sandbox Code Playgroud)
打造形象
docker build -t test .
Run Code Online (Sandbox Code Playgroud)
运行容器
docker run --rm -p 8080:8080 test
Run Code Online (Sandbox Code Playgroud)
在浏览器上访问 http://localhost:8080/,您的 Spring-Boot 应用程序将在没有 Rosetta 2 的情况下运行。
免责声明:我不是 Java 开发人员,我的 Dockerfile 用于概念验证目的。
请记住,您的 Docker 映像是根据 ARM64 架构构建的。如果您想在 Intel/AMD 处理器上运行此容器,则必须更改FROM --platform=linux/amd64 ubuntu:20.04
Dockerfile。
归档时间: |
|
查看次数: |
23767 次 |
最近记录: |