在sbt中为linux/amd64在Mac ARM64上构建本地映像



我正在使用sbt中的sbt-native-packager插件生成一个linux可执行文件,该可执行文件将封装在alpine docker映像中。

由于我已经切换到新的Mac arch(ARM64(,这不再起作用了。

使用此配置,构建器将默认选择linux/arm64清单

GraalVMNativeImage / containerBuildImage := GraalVMNativeImagePlugin
.generateContainerBuildImage(s"ghcr.io/graalvm/graalvm-ce:ol8-java17-22")

我创建的可执行文件属于类型

app:ELF 64位LSB可执行文件,ARM aarch64,版本1(SYSV(,动态链接,解释器/lib/ld-linux-aarch64.so.1,对于GNU/linux 3.7.0,BuildID[sha1]=52b76d5e755b56293ae87fc6899655312ce4004c,带debug_info,未剥离

尝试从alpine docker映像运行此操作将导致

standard_init_linux.go:228:exec用户进程导致:没有这样的文件或目录

或尝试通过sh:运行文件

/bin/sh:app:未找到

问题是.

我只想构建linux/aamd64映像,并将其封装在我的macbook 的alpine映像中

有办法做到这一点吗?

我试着直接引用正确的摘要

GraalVMNativeImage / containerBuildImage := GraalVMNativeImagePlugin
.generateContainerBuildImage("ghcr.io/graalvm/graalvm-ce@sha256:c2dbf1352ae7ce939dc52e0e4645d905a9366c5ea0ff5f12ef08b57d48ae847a")

但我想我现在会满足于让ELF 64-bit LSB executable, ARM aarch64,应用程序在轻量级docker映像中运行

我对Graal一无所知,但如果您在build.sbt中使用以下代码,您将能够从Mac M1(arm64(构建amd64图像:

dockerBuildCommand := {
if (sys.props("os.arch") != "amd64") {
// use buildx with platform to build supported amd64 images on other CPU architectures
// this may require that you have first run 'docker buildx create' to set docker buildx up
dockerExecCommand.value ++ Seq("buildx", "build", "--platform=linux/amd64", "--load") ++ dockerBuildOptions.value :+ "."
} else dockerBuildCommand.value
}

来源https://github.com/sbt/sbt-native-packager/issues/1503

最新更新