本机是WIndows,AMD64架构的;目标Linux服务器是ARM64架构的Debian。进行jar包的容器部署方式。
目标服务器
root@localhost:~# uname -a
Linux localhost 5.10.0-11-arm64 #1 SMP Debian 5.10.92-2 (2022-02-28) aarch64 GNU/Linux
root@localhost:~# arch
aarch64
第1次尝试
Dockerfile
# 基础镜像
FROM openjdk:8-jdk-alpine
# 拷贝jar包
COPY ./target/arm64web-0.0.1-SNAPSHOT.jar /opt/arm64web-0.0.1-SNAPSHOT.jar
# 端口和工程启动的端口一致
EXPOSE 8080
# 运行命令
ENTRYPOINT ["java", "-jar", "-Duser.timezone=Asia/Shanghai", "/opt/arm64web-0.0.1-SNAPSHOT.jar"]
MAINTAINER yangliu
打包命令
# 打包命令
docker build -t arm64web:1.0 .
# 容器输出命令
docker save -o arm64web.tar arm64web:1.0
运行出错
root@localhost:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
arm64web 1.0 74d619bb615d 11 minutes ago 122MB
root@localhost:~# docker run -p 8080:8080 --name arm64web arm64web:1.0
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
exec /usr/bin/java: exec format error
第2次尝试
修改打包命令
docker buildx build --platform linux/arm64 -t arm64web:2.0 .
则运行成功
root@iZbp14skqirpwqnij2h78cZ:~# docker run -p 8080:8080 --name arm64web arm64web:2.0
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.7-SNAPSHOT)
2022-12-07 15:04:05.359 INFO 1 --- [ main] c.example.arm64web.Arm64webApplication : Starting Arm64webApplication v0.0.1-SNAPSHOT using Java 1.8.0_212 on 12b5a97ab51d with PID 1 (/opt/arm64web-0.0.1-SNAPSHOT.jar started by root in /)
2022-12-07 15:04:05.363 INFO 1 --- [ main] c.example.arm64web.Arm64webApplication : No active profile set, falling back to 1 default profile: "default"
2022-12-07 15:04:06.862 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-12-07 15:04:06.879 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-12-07 15:04:06.880 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.69]
2022-12-07 15:04:06.997 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-12-07 15:04:06.998 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1507 ms
2022-12-07 15:04:07.534 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-12-07 15:04:07.545 INFO 1 --- [ main] c.example.arm64web.Arm64webApplication : Started Arm64webApplication in 2.927 seconds (JVM running for 3.513)
http://localhost:8080/test