我们有一个在 Docker 容器中运行的 Java Spring Boot 应用程序。它基于 openjdk:13-jdk-alpine。我们将它部署到 Linux 机器上,但我们也能够在 Windows 机器和基于 Intel 的 iMac 上本地运行它。
不过,我们发现它无法在基于 ARM 的 MacBook Pro 上正常运行。我们得到的异常是基本的 Java 错误,例如“找不到符号 Java.class[]”,以及其他看起来像是 JVM 已关闭的错误。
有没有一种方法可以构建适用于所有这些平台(包括 M1 MacBook Pro)的 Docker 镜像?
最佳答案
我的 M1 macbook 上的 Java 容器也有很多问题。对于您的问题,也许您需要创建自己的 docker 镜像:
jetty 文件
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" ]
构建图像
docker build -t test .
运行容器
docker run --rm -p 8080:8080 test
在浏览器上访问 http://localhost:8080/,您的 Spring-Boot 应用程序在没有 Rosetta 2 的情况下运行。
免责声明:我不是 Java 开发人员,我的 Dockerfile 用于概念验证目的。
请记住,您的 Docker 镜像是针对 ARM64 架构构建的。如果您想在 Intel/AMD 处理器上运行此容器,则必须更改 Dockerfile 上的 FROM --platform=linux/amd64 ubuntu:20.04
。
关于java - Docker 镜像运行在 Intel mac 而不是 M1 mac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68975743/