java - Docker 镜像运行在 Intel mac 而不是 M1 mac

标签 java docker jvm 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 镜像?

最佳答案

我的 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/

相关文章:

java - java.math.MutableBigInteger 的目的是什么?

java - TrayDialog 中的 SWT 帮助按钮

没有 JVM 的 Java

java - 没有引用的新对象的生命周期

docker - 使用本地文件在 Windows 上构建 docker 镜像时使用 --squash 的替代方法

java - LDC 指令代码的负值是什么意思?

java - JPA表独占锁

java - 读取 Java Internet 连接设置 - jdk1.4

windows - docker:是否可以从另一个容器中启动 native Windows 同级容器?

eclipse - 如何从 eclipse 连接到 docker 进行调试?