docker運行異構(gòu)鏡像詳解
概述
關(guān)于docker鏡像在不同的cpu架構(gòu)下運行報錯的解決辦法,作者踩坑驗證,在此分享經(jīng)驗
某次工作遇到需要銀行內(nèi)部部署docker鏡像,由于行內(nèi)已經(jīng)開始走信創(chuàng)的路線,使用鯤鵬系統(tǒng),arm架構(gòu),結(jié)果就遇到了
standard_init_linux.go:219: exec user process caused: exec format error
沒辦法,只能自己研究一下。
關(guān)于 docker 版本
docker
運行其他平臺容器,需要使用--platform
參數(shù)來指定平臺docker 19.03.9
及以上的版本才支持--platform
參數(shù)- 默認沒有開啟
--platform
參數(shù),需要手動開啟,直接執(zhí)行,會有下面的報錯
查看是否開啟 experimental 功能
--platform
參數(shù)需要 experimental
為 true
,通過下面的命令可以驗證是否開啟
修改 daemon.json 文件,開啟 experimental 功能
修改完成后,重啟 docker 來驗證
systemctl restartdocker docker info | grep -i 'experimental'
binfmt_misc 、QEMU依賴安裝
binfmt_misc安裝
qemu-user-static安裝
安裝結(jié)果檢查
運行arm64v8/centos鏡像
docker run -it --rm --platform arm64 -v /root/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/centos:latest /bin/bash
跨架構(gòu)構(gòu)建
思路是在構(gòu)建過程中,如果有RUN指令,在指令前將qemu文件加進去。
以buildah為例,跟docker buildx應(yīng)該沒有差異。
可能出現(xiàn)的問題
內(nèi)核版本過低報錯
解決辦法:
- 方法一:升級內(nèi)核
- 方法二:手動擋實現(xiàn)-p yes功能
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker安裝并持久化postgresql數(shù)據(jù)庫的操作步驟
這篇文章主要介紹了docker安裝并持久化postgresql數(shù)據(jù)庫的操作步驟,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12docker 實現(xiàn)容器與宿主機無縫調(diào)用shell命令
這篇文章主要介紹了docker 實現(xiàn)容器與宿主機無縫調(diào)用shell命令的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨想過來看看吧2021-03-03如何解決docker logs無法實時輸出腳本打印的內(nèi)容
這篇文章主要介紹了如何解決docker logs無法實時輸出腳本打印的內(nèi)容問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07docker-compose搭建prometheus+grafana+釘釘告警
本文主要介紹了docker-compose搭建prometheus+grafana+釘釘告警,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據(jù)庫的解決方案
這篇文章主要介紹了Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據(jù)庫的解決方案,重點給大家介紹如何把shell/sql腳本放入/docker-entrypoint-initdb.d/目錄中,讓容器啟動的時候自動執(zhí)行創(chuàng)建2021-06-06