Skip to content

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