[英]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.