繁体   English   中英

构建一个多平台 JDK/Tomcat docker 镜像,以便能够在 Apple Silicon 上运行

[英]Build a multiplatform JDK/Tomcat docker image to be able to run on Apple Silicon

我们在 CI 中使用 tomcat 服务构建 docker 图像,如下所示:

- PLATFORMS: linux/amd64,linux/arm64/v8
- gradle build …
# Switch to use different docker driver which supports multiplatform builds
- docker buildx create --use
- docker buildx build --push --platform=$PLATFORMS -t $image -f infra/Dockerfile .

这有效并推送可以在 linux/amd64 平台上轻松运行的图像。

然而,当在 Apple Silicon 上运行这个图像时,它失败了:

org.apache.catalina.startup.ContextConfig
Failed to detect ServletContainerInitializers for context with name [] service 
java.net.MalformedURLException: no !/ found in url spec:file:/usr/local/tomcat/lib/tomcat-websocket.jar!/META-INF/services/javax.servlet.ServletContainerInitializer

此处的完整堆栈跟踪:https://gist.github.com/knyttl/c8f2c24ac3d94a91911ca08f08eff668

让我有点惊讶的是:

org.apache.catalina.startup.VersionLoggerListener Architecture:          amd64

我猜架构应该是linux/arm64/v8 ,那为什么跑错了呢?

最终,我放弃了构建M1镜像的CI方式。

相反,我编写了一个 bash 脚本(将在 M1 上本地运行),它提取 CI 构建的图像并使用 CI 构建的图像内容重建 M1 图像。 不太好,但它有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM