docker 运行异构镜像

概述

关于docker镜像在不同的cpu架构下运行报错的解决办法,作者踩坑验证,在此分享经验

某次工作遇到需要银行内部部署docker镜像,由于行内已经开始走信创的路线,使用鲲鹏系统,arm架构,结果就遇到了standard_init_linux.go:219: exec user process caused: exec format error,没办法,只能自己研究一下。

关于 docker 版本

  • docker 运行其他平台容器,需要使用 --platform 参数来指定平台
  • docker 19.03.9 及以上的版本才支持 --platform 参数
  • 默认没有开启 --platform 参数,需要手动开启,直接执行,会有下面的报错

查看是否开启 experimental 功能

--platform 参数需要 experimental 为 true,通过下面的命令可以验证是否开启

修改 daemon.json 文件,开启 experimental 功能

修改完成后,重启 docker 来验证

systemctl restart

docker docker info | grep -i 'experimental'

binfmt_misc 、QEMU依赖安装

binfmt_misc安装

qemu-user-static安装

安装结果检查

运行arm64v8/centos镜像

docker run -it --rm --platform arm64 -v /root/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/centos:latest /bin/bash

跨架构构建

思路是在构建过程中,如果有RUN指令,在指令前将qemu文件加进去。

以buildah为例,跟docker buildx应该没有差异。

可能出现的问题:

  1. 内核版本过低报错

解决办法:

  1. 方法一:升级内核
  2. 方法二:手动挡实现-p yes功能

参考:

https://www.cnblogs.com/xiaojiluben/p/16745276.html

x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建-CSDN博客

https://github.com/multiarch/qemu-user-static/tree/master

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值