exec user process caused: exec format error
今天开发的app 做了一个新的docker image, 发布到K8S之后, 就报下面的错:
standard_init_linux.go:228: exec user process caused: exec format error
还以为自己写的代码配置出错了, 想登上去看看, 发现进程压根就没起来.
Google 一把, 有人说是entrypoint的shell 文件的 shebang 不对, 我这里没有这个问题.
后来看到有人说是可执行格式的错误, 发现还真是.
首先, 我在本地Mac Pro (ARM) 上去执行这个image, 很正常的执行起来了, 然后我在另外一个Ubuntu 上面执行这个image, 就给我报下面的错误了:
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
所以, 很明显, 这个image 是给 ARM64/v8 用的. 用 docker image inspect <img>
去查看, 能看到这个image 是给什么平台机构的.
我的 docker build 环境是 MAC ARM 机器, 之前一直没有错, 今天为啥出错了, 原因很有可能是我今天重启了 Docker Desktop.
去看 docker 官方文档: https://docs.docker.com/engine/reference/commandline/build/ 发现他们最近(20220914) 对于 docker build 新加了一个参数 (--platform)
到它 change 去看, 发现最新的 v141
https://docs.docker.com/engine/api/version-history/#v140-api-changes
所以, 要在 Mac Pro ARM 芯片上做 x86_64/amd64 的image, 要给一个新参数 --platform linux/amd64