当前位置: 首页 > 知识库问答 >
问题:

Docker镜像在Intel mac上运行,但不是M1 mac

段干跃
2023-03-14

我们有一个在Docker容器中运行的Java Spring Boot应用程序。它基于openjdk:13 jdk alpine。我们将其部署到Linux机器上,但我们也能够在Windows机器上以及基于Intel的iMac上本地运行它。

然而,我们发现它不能在基于ARM的苹果笔记本电脑上正常运行。我们得到的例外是基本的Java错误,比如“找不到符号Java.class[]”,以及其他看起来像JVM关闭的东西。

有没有办法构建一个可以在所有这些平台上运行的Docker映像,包括M1 MacBook Pro?

共有3个答案

丰景同
2023-03-14

使用多架构支持构建图像,以消除未来所有可能的架构故障。要干净地做到这一点,请避免在Dockerfile中使用任何与平台相关的内容,只使用老式的Dockerfiles即可。

如果您正在使用github和github操作,您可以选中此选项来构建图像并将其推送到图像存储库中。这也可以用于构建在树莓样SBC上工作的图像。

马承
2023-03-14

我让它与以下图像一起工作。我用

docker pull bellsoft/liberica-openjdk-alpine-musl:17

我的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"]

现在docker build命令起作用了

谭嘉容
2023-03-14

我的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" ]

生成图像

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上更改--platform=linux/amd64 ubuntu:20.04。

 类似资料:
  • 我对Openshift Origin非常陌生。我现在正在尝试在OpenShift origin中部署docker容器的可能性。为此,我创建了一个非常简单的docker容器,它将两个数字相加并产生结果: https://github.com/abrahamjaison01/openshifttest 我在本地创建了一个docker映像,在docker hub中创建了一个公共docker映像: 我在本

  • 问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行

  • 我想通过Docker容器在AWS Lamda上运行selenium脚本。 我正在使用AWS EC2构建容器,然后通过AWS Lambda RIE在本地测试容器。一旦测试成功,容器将在ECR注册,以便馈送AWS Lambda。 尽管RIE在EC2上的本地测试总是成功的,但我无法让Lambda正常工作。Lambda测试当前总是失败,并显示以下错误消息: 在这里,您可以找到我实际使用的所有代码: 文档

  • 我有以下Dockerfile: 以及以下docker-compose.yml: 如果我通过docker cmd以以下方式手动运行Dockerfile: 看起来一切正常,我得到了它实际执行的应用程序输出日志: 但是,当我试图通过docker-comment以以下方式执行我的应用程序时: 我的应用程序似乎启动正常,但无法继续执行。以下是输出: 我尝试执行show logs命令: 但我得到的唯一记录是第

  • 拉取官方 Docker 镜像 docker pull apache/shardingsphere-proxy 手动构建 Docker 镜像(可选) git clone https://github.com/apache/shardingsphere mvn clean install cd shardingsphere-distribution/shardingsphere-proxy-dist

  • 我正在学习docker labs官方的多容器应用程序实践教程。在MacBook Pro M1终端上运行以下命令时 我得到下面的错误。 docker:清单列表条目中没有与linux/arm64/v8匹配的清单。