抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Sephiroth1s'blog

The quieter you became,the more you are able to hear.

测试环境

Docker version 27.3.1, build ce12230

Ubuntu 20.04.6 LTS x86_64
x86_64 Linux 5.15.0-124-generic

Ubuntu 22.04 jammy
x86_64 Linux 5.15.0-124-generic

docker 运行与本机不同架构的镜像

几个一样效果的工具

本质都一样

使用方式

  • 直接使用相关镜像平台镜像即可,具体支持,可以看 ls /proc/sys/fs/binfmt_misc/qemu* 或者 tonistiigi/binfmt 相关说明
    docker run --platform linux/arm64 --rm -t arm64v8/ubuntu uname -m
    docker run --rm -t arm32v6/ubuntu uname -m
    docker run --platform linux/arm/v7 --rm -t arm32v7/ubuntu uname -m

使用注意

  • 针对 arm64 目标镜像,–platform linux/arm64 是必须的,看样子好像是 ubuntu 构建应该是 multi-platform images 方式如下图,通过 manifest 来自动识别目标镜像的平台,所以会报错。
  • 所以保守方案,只要有 qemu 了,不管三七二十一都加上 --platform 参数
    # 如果本地没有镜像则会报错
    docker run --rm -t arm64v8/ubuntu uname -m

    Unable to find image 'arm64v8/ubuntu:latest' locally
    latest: Pulling from arm64v8/ubuntu
    latest: Pulling from arm64v8/ubuntu
    docker: no matching manifest for linux/amd64 in the manifest list entries.
    See 'docker run --help'.

    # 如果本地有目标架构镜像,则警告
    docker run --rm -t arm64v8/ubuntu uname -m

    WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
    aarch64

chroot 玩法

  • 搜资料时发现个有趣玩法记录下,参考
  • 使用 chroot 结合 qemu-user-static 来实现,在 x86 平台运行 arm rootfs
  • 更详细的 chroot 挂载可以参考之前写的文章
    sudo apt install qemu-user-static -y

    sudo mount -o loop rootfs.ext4 ./rootfs
    #
    tar -xjvf rootfs.tar.bz2 -C ./rootfs/

    cp /usr/bin/qemu-arm-static ./rootfs/usr/bin
    sudo chroot ./rootfs/ /bin/sh

参考链接