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平台的,对应的打包脚本也就变成了:

问题解决!

相关推荐
188号安全攻城狮19 小时前
【PWN】HappyNewYearCTF_8_ret2csu
linux·汇编·安全·网络安全·系统安全
上天_去_做颗惺星 EVE_BLUE20 小时前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
Yana.nice20 小时前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月20 小时前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
小白跃升坊21 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey21 小时前
【Linux】线程同步与互斥
linux·笔记
舰长11521 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀21 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng21 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.21 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居