有人知道做網站嗎?廣告公司排名
概述
關于docker鏡像在不同的cpu架構下運行報錯的解決辦法,作者踩坑驗證,在此分享經驗
某次工作遇到需要銀行內部部署docker鏡像,由于行內已經開始走信創(chuàng)的路線,使用鯤鵬系統(tǒng),arm架構,記過就遇到了standard_init_linux.go:219: exec?user process caused: exec?format error,沒辦法,只能自己研究一下。
關于 docker 版本
- docker?運行其他平臺容器,需要使用?--platform?參數來指定平臺
- docker 19.03.9?及以上的版本才支持?--platform?參數
- 默認沒有開啟?--platform?參數,需要手動開啟,直接執(zhí)行,會有下面的報錯
查看是否開啟 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應該沒有差異。
可能出現的問題:
- 內核版本過低報錯
解決辦法:
- 方法一:升級內核
- 方法二:手動擋實現-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