如何解决如何构建启动 .jar 并在 RaspberryPi 4B 上运行的 Docker 容器?
我正在开发一个小应用程序,我想在 RaspBerry Pi(型号 4B、32 位、4GB RAM)上的 docker 容器中运行该应用程序。我目前正在学习 Docker,到目前为止我只在我的开发机器(mac)上构建和运行了一些东西。容器设置和 jar 在那台机器上没有问题。
这是我非常基本的 Dockerfile:
FROM java:8
workdir /
ADD my_jar.jar my_jar.jar
EXPOSE 8080
CMD java -jar my_jar.jar
如您所见,没有太多事情发生。我希望能够在 pi 上 Docker build . -t myDockerImage
然后运行我的容器。根据输出,构建成功,但运行失败并显示错误:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested
standard_init_linux.go:219: exec user process caused: exec format error
我做了一些研究,我能找到的只有使用 OpenJDK 的建议。这样做了,但无法构建,它说:
no matching manifest for linux/arm/v7 in the manifest list entries
我在 Docker Hub 上环顾四周,但似乎没有适合这种架构的 Java 映像。或者我不知道该找什么...?
那么我如何在这台机器上的 docker 容器中获取 Java(最好以一种相当简单、方便的方式,但如果不存在,我很乐意以艰难的方式做到这一点,无论如何可能需要)?
顺便说一句:这就是 lshw
关于 RPi 的说明:
raspBerrypi
description: ARMv7 Processor rev 3 (v7l)
product: RaspBerry Pi 4 Model B Rev 1.1
serial: 10000000b3320840
width: 32 bits
capabilities: smp
解决方法
问题在于 JRE 仍然依赖于操作系统,而这取决于平台架构。 Java 的标准 docker 映像很可能会使用基于 amd64/x64 的 Linux 操作系统,并安装了适当的 JDK。
然而,Raspberry PI 使用 ARM 架构,因此输出 <!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
<meta name="viewport" content="width=device-width,initialscale=1">
<div class="links">
<ul>
<li class="social-share facebook">Facebook</li>
<li class="social-share twitter">Twitter</li>
</ul>
</div>
</head>
<body>
<div id="container">
<button onclick="clicked()" id="btn">Trykk her for et visdomord</button>
</div>
<p id="output">Generer et visdomsord ved å trykke på knappen</p>
<script src="main.js"></script>
。
因此您需要一个兼容 ARM 的映像,例如其中之一:https://hub.docker.com/r/arm32v7/adoptopenjdk
我不确定 ARM v7 和 v8 的兼容性如何,所以我建议您坚持使用 v7 映像:)
,默认情况下,它似乎是为另一个平台构建的。您是否尝试在构建图像时传递 --platform=linux/arm/v7
?
看看 this 是否有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。