QEMU实现跨平台运行docker

ARM架构的容器放到x64运行docker会报错,需要重新docker build才可以,但是我们可以利用QEMU实现跨平台

查看本机器架构:uname -a 或者arch

下载QEMU:Releases · multiarch/qemu-user-static
qemu-user-static 项目已经准备好了需要静态编译 QEMU,可以在 Release 页面下载 qemu-arm-static 并复制到系统 PATH 路径中:

$ curl -L -o qemu-arm-static-v2.11.1.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/v2.11.1/qemu-arm-static.tar.gz
$ tar xzf qemu-arm-static-v2.11.1.tar.gz		# 下载好了直接到这一步解压
$ sudo cp qemu-arm-static /usr/bin/

测试进入一个arm架构的docker容器导出的镜像:

$ docker run -it --name fy-python-test -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static fy-python-test qemu-aarch64-static /bin/bash

虽然成功进入容器,但是内核并无法识别我的所有命令,我还是无法对docker容器进行操作

为了让内核可以理解 ARM ELF 文件,就需要 binfmt_misc 了,确定内核开启了 binfmt_misc,qemu-user-static提供了一个基于 Docker 的一键解决方案:

$ docker run --rm --privileged multiarch/qemu-user-static:register

然后在x86_64 linux 虚拟机上再次运行容器

$ docker run -it --name fy-python-test -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static fy-python-test qemu-aarch64-static /bin/bash

在这里插入图片描述
成功在x86_64系统运行arm架构的docker镜像

关闭后如何再次启动:

$ docker run --rm --privileged multiarch/qemu-user-static:register
$ docker start fy-python-test
$ docker exec -it fy-python-test qemu-aarch64-static /bin/bash

猜你喜欢

转载自blog.csdn.net/m0_53195006/article/details/129890780