我正在使用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