<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="X86机器运行ARM64 Docker">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2024-09-12 11:16<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
X86机器运行ARM64 Docker


Github：https://github.com/multiarch/qemu-user-static


Dockerhub：https://hub.docker.com/r/multiarch/qemu-user-static


Github：https://github.com/docker-library/official-images


镜像地址：Debian Ubuntu Alpine Fedora Almalinux Rockylinux Centos Opensuse


其他镜像：https://hub.docker.com/u/arm64v8


multiarch/qemu-user-static 是使能 QEMU 执行不同的多架构容器，以下是 Docker 的示例。




XML/HTML代码


    # 查看硬件构架

    $ uname -m

    x86_64

    # 运行arm64v8版本的ubuntu系统，查看构架（错误提示）

    $ docker run --rm -t --platform arm64 arm64v8/ubuntu uname -m

    standard_init_linux.go:211: exec user process caused &quot;exec format error&quot;

    # 运行qemu多构架支持

    $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

    # 查看arm64v8版本的ubuntu系统，查看构架（正常显示aarch64）

    $ docker run --rm -t --platform arm64 arm64v8/ubuntu uname -m

    aarch64







它适用于许多架构和操作系统容器映像，以下为各个版本硬件构架演示。




XML/HTML代码


    $ docker run --rm -t --platform arm arm32v6/alpine uname -m

    armv7l

    $ docker run --rm -t --platform ppc64le ppc64le/debian uname -m

    ppc64le

    $ docker run --rm -t --platform s390x s390x/ubuntu uname -m

    s390x

    $ docker run --rm -t --platform arm64 arm64v8/fedora uname -m

    aarch64

    $ docker run --rm -t --platform arm arm32v7/centos uname -m

    armv7l

    $ docker run --rm -t --platform ppc64le ppc64le/busybox uname -m

    ppc64le

    $ docker run --rm -t --platform 386 i386/ubuntu uname -m

    x86_64

    #Podman有效

    $ sudo podman run --rm --privileged multiarch/qemu-user-static --reset -p yes  

    $ podman run --rm -t arm64v8/fedora uname -m  

    aarch64  







常见硬件构架镜像地址：


ARMv6 32-bit  ARMv7 32-bit  ARMv8 64-bit  Linux x86-64  Windows x86-64


ARMv5 32-bit  IBM POWER8  IBM z Systems  MIPS64 LE  RISC-V 64-bit  x86/i686 


简单创建一个arm64v8的Debian、Ubuntu、Centos、Alpine




XML/HTML代码


    docker run --name multiarch --privileged --restart=always multiarch/qemu-user-static --reset -p yes









XML/HTML代码


    #Debian

    docker run -tid --name debian --privileged=true --platform arm64 arm64v8/debian

    docker exec -it debian  /bin/bash

    #Ubuntu

    docker run -tid --name ubuntu --privileged=true --platform arm64 arm64v8/ubuntu

    docker exec -it ubuntu  /bin/bash

    #Centos

    docker run -tid --name centos --privileged=true --platform arm64 arm64v8/centos

    docker exec -it centos  /bin/bash

    #Alpine

    docker run -tid --name alpine --privileged=true --platform arm64 arm64v8/alpine

    docker exec -it alpine  /bin/sh




此项目可以让Docker支持不同的硬件平台，可以测试编译程序，非常方便，具体使用可以自行修改。


注意：新版本docker需要使用 --platform arm64 指定镜像平台，否则只能拉取默认平台版本。另以上操作在PVE平台可以直接使用，无需安装任何组件和操作，其他系统则需要复杂设置才能使用。


最新更新：


官方傻瓜命令（强烈推荐使用）




XML/HTML代码


    docker run --privileged --rm tonistiigi/binfmt --install all





系统要求：


Linux 内核版本 4.8 或更高版本


binfmt-support2.1.7 或更高版本


原理：QEMU 二进制文件必须静态编译并使用 fix_binary标志注册，使用 tonistiigi/binfmt 映像安装 QEMU 并通过单个命令在主机上注册可执行文件类型，将安装 QEMU 二进制文件并将其注册到 binfmt_misc，从而使 QEMU 能够执行非本地文件格式进行模拟。


Github：https://hub.docker.com/r/tonistiigi/binfmt


Dockerhub：https://hub.docker.com/r/tonistiigi/binfmt




手动设置方法（原理）


查看主机支持的CPU构架




XML/HTML代码


    mount | grep binfmt_misc

    ls /proc/sys/fs/binfmt_misc/




Docker运行qemu-user-static增加CPU支持




XML/HTML代码


    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes




验证是否成功1




XML/HTML代码


    ls /proc/sys/fs/binfmt_misc/





验证是否成功（新版docker必须指定平台，此命令不适用）




XML/HTML代码


    docker run --rm -t arm64v8/alpine uname -m




由于主机 CPU 是 AMD，因此会出现此警告，可以通过向 docker 指定平台来消除此警告：




XML/HTML代码


    docker run --rm -t --platform arm64 arm64v8/alpine uname -m









特别提醒：以上方法均为物理机或者虚拟机测试通过，至于lxc、lxd之类容器化的环境是无法使用的。


如果系统是Alpine需要执行按照以下命令执行




Alpine安装常用组件




XML/HTML代码


    apk add htop nload curl wget tar ncdu git bash net-tools sudo













Docker一键安装命令


XML/HTML代码


    bash &lt;(curl -sL https://iii80.com/sh/docker.sh)





Docker管理面板Portainer单独安装




XML/HTML代码


    docker run -d --restart=always --name=&quot;portainer&quot; -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce

    #163镜像安装

    docker run -d --restart=always --name=&quot;portainer&quot; -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock hub-mirror.c.163.com/6053537/portainer-ce

    docker restart portainer




多平台支持（关键命令）




XML/HTML代码


    apk add qemu-x86_64 qemu-i386 qemu-openrc openrc

    rc-update add qemu-binfmt default

    rc-service qemu-binfmt start

    docker run --privileged --rm tonistiigi/binfmt --install all




通过上面命令可以实现Docker多平台支持。




</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
