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

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下不生效

确认是否成功

[root@localhost 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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值