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