Docker amd64 跨平台运行 arm64 容器
前提
- docker 已创建自定义构建器。
- docker 已安装 QEMU。
关于自定义构建器和安装 QEMU 可参考文档:Docker buildx 构建 openjdk 多平台 jar 运行镜像 中相关的章节。
检查:
shell
docker buildx ls
# 若出现以下支持的的,就是已经安装好了。
# linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (6 more)以 debian 镜像为例
拉取指定架构下的镜像
使用 --platform linux/arm64 参数。同理,可使用 --platform linux/amd64 参数指定为另一个架构平台。
shell
# 拉取 arm64 debian 镜像
docker pull --platform linux/arm64 registry.cn-hangzhou.aliyuncs.com/mengweijin/debian:12.12
# 可以检测拉取下来的镜像的实际架构
docker image inspect registry.cn-hangzhou.aliyuncs.com/mengweijin/debian:12.12 | grep Architecture
# 启动 arm64 debian 镜像(--platform linux/arm64)
docker run --name debian-arm64 --platform linux/arm64 -itd registry.cn-hangzhou.aliyuncs.com/mengweijin/debian:12.12进入容器查看系统架构信息
shell
# 以 root 用户进入容器
docker exec -it --user root debian-arm64 /bin/bash
# 查看容器的系统内核(包括架构信息)
uname -a
# 查看发行版
cat /etc/os-release达梦示例(容器内部服务启动报错)
可以启动,但是会启动失败,因为 QEMU 模拟器并不能完全兼容 amd64 和 arm64 所有东西。
所以虽然可以运行容器,但并不一定能够正常使用!
txt
Database first startup failed, reinitialize database please!
qemu: uncaught target signal 5 (Trace/breakpoint trap) - core dumped此时可以尝试更换 QEMU 版本来解决。
shell
docker pull --platform linux/arm64 registry.cn-hangzhou.aliyuncs.com/mengweijin/dameng:dm8_20250423_HWarm920_kylin10_sp1_64
docker image inspect registry.cn-hangzhou.aliyuncs.com/mengweijin/dameng:dm8_20250423_HWarm920_kylin10_sp1_64 | grep Architecture
docker run -itd --name dm --platform linux/arm64 -p 5236:5236 registry.cn-hangzhou.aliyuncs.com/mengweijin/dameng:dm8_20250423_HWarm920_kylin10_sp1_64
docker exec -it --user root dm-arm64 /bin/bash
uname -a
cat /etc/os-release