欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

centos7 x86_64 下通过qemu-user-static 运行arm64的docker镜像

程序员文章站 2022-07-14 10:27:26
...

1、qemu-user-static的下载(x86_64)

wget https://github.com/multiarch/qemu-user-static/releases/download/v5.2.0-2/qemu-aarch64-static

1、binfmt支持

#重置binfmt
docker run --rm --privileged multiarch/qemu-user-static --reset 
#设置binfmt
docker run --rm --privileged multiarch/qemu-user-static -p yes   #在centos7下不生效

确认是否成功

[[email protected] binfmt_misc]# ls -al /proc/sys/fs/binfmt_misc
总用量 0
drwxr-xr-x 2 root root 0 4月   1 14:15 .
dr-xr-xr-x 1 root root 0 4月   1 14:15 ..
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-aarch64
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-aarch64_be
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-alpha
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-arm
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-armeb
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-hppa
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-m68k
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-microblaze
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-microblazeel
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-mips
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-mips64
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-mips64el
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-mipsel
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-mipsn32
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-mipsn32el
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-or1k
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-ppc
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-ppc64
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-ppc64le
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-riscv32
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-riscv64
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-s390x
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-sh4
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-sh4eb
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-sparc
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-sparc32plus
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-sparc64
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-xtensa
-rw-r--r-- 1 root root 0 4月   2 11:33 qemu-xtensaeb
--w------- 1 root root 0 4月   2 11:33 register
-rw-r--r-- 1 root root 0 4月   1 14:15 status

由于qemu-user-static结合binfmt_misc来实现arm架构的指令模拟,所有与Linux kernel相关。

我们遇到的问题:本地UBUNTU 16.04使用kernel 4.15.0-74-generic,可正常模拟arm架构指令;而集群中CentOS 07使用kernel 3.10.0-327.el7.x86_64,在模拟指令时出现问题,抛出“standard_init_linux.go:190: exec user process caused “no such file or directory””错误。具体问题描述参见Issue 100.

主要问题是kernel 3.10版本上的entry file中的flags为空,不是F。

解决方法:

安装Centos 8来升级kernel version;
手动mount qemu-aarch64-static到容器;

1、方法一 (直接mount)

docker  run -it --rm -v `pwd`/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/redis  uname -m 

#aarch64

2、方法二 (把qemu-aarch64-static放到docker里面)

docker build --rm -t "arm64v8/redis_new" -<<EOF
FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu
FROM arm64v8/redis
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
EOF

docker run --rm -t "arm64v8/redis_new" uname -m
#aarch64
相关标签: 容器化