docker报错standard init linux.go:228 exec user process caused: exec format error

1、报错

使用Dockerfile自己做的服务镜像,docker run时启动失败,报错如下:

java 复制代码
standard init linux.go:228 exec user process caused: exec format error

2、原因一

当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下构建的,而docker run是在amd架构下执行的。排查:

bash 复制代码
# 镜像信息
docker inspect 镜像ID |grep -i Arch

查看当前服务器的CPU架构信息:

bash 复制代码
# Linux信息
uname -a
# 或
lscpu

此时,可通过docker buildx插件模拟多CPU架构,构建出你需要的镜像,从而解决这个问题。

2、原因二

要是前面的这个问题,那倒是明晰,坑就在你明明用docker buildx构建的,查看两个架构信息也没毛病,但还是报这个错。

此时,考虑你Dockfile里的基础镜像,它的架构也要对应上。不能做amd下的镜像,但基础镜像却是arm下的。比如我之前使用JDK的镜像,Dockerfile共用一个,开头都是:

bash 复制代码
FROM openjdk:11.0.4

这个坑得处理掉,可以通过--platform参数来完成指定架构镜像的拉取:

bash 复制代码
docker pull --platform linux/arm64 openjdk:11.0.4
bash 复制代码
docker pull --platform linux/amd64 openjdk:11.0.4

后面我是通过CICD平台的,对应的打包脚本也就变成了:

问题解决!

相关推荐
TDengine (老段)几秒前
初学者使用 docker 快速体验 TDengine 功能
大数据·物联网·docker·容器·时序数据库·tdengine
峥嵘life3 分钟前
Android16 EDLA【GTS】GtsUnofficialApisUsageTestCases存在fail项
android·linux·运维·学习
德育处主任Pro5 分钟前
『NAS』推荐几个绿联 NAS Docker 能用的镜像加速器
运维·docker·容器
海天鹰6 分钟前
fcitx5皮肤
linux
Hello.Reader9 分钟前
Flink 2.2 从本地 Standalone 到 Docker/Kubernetes,把 Hive 批流打通,并在 SQL 里接入 OpenAI 推理
docker·flink·kubernetes
晚风吹长发11 分钟前
初步了解Linux中的信号保存和简单使用
linux·运维·服务器·数据结构·后端·算法
林深现海11 分钟前
基于宇树 Go2 与 NaVILA 的全栈视觉导航系统深度解析
linux·vscode·yolo·ubuntu·机器人
阿豪学编程13 分钟前
【Linux】Socket网络编程
linux·服务器·网络
小张成长计划..21 分钟前
【linux】4:编辑器vim的使用
linux·编辑器·vim
燃于AC之乐1 小时前
【Linux系统编程】进程调度解析:优先级与O(1)调度算法
linux·操作系统·进程调度·进程优先级·调度算法