解决mac m2版本build或pull的docker镜像无法在x86架构linux下执行的问题

背景

一般测试/生产集群上不通外网,导致启动一些组件/服务会拉不到镜像。
通常情况下,研发会在自己的本地机器上拉下来镜像并打包上传到服务器上,再导入到集群的镜像仓库中。

报错

运行镜像,报错:
exec /usr/bin/bash: exec format error

原因

mac m2是apple芯片,arm架构,线上linux服务器是amd架构,导致镜像无法运行。

解决方案

在docker pull镜像的时候,使用--platform参数指定架构版本。
取值通常有linux/arm64,linux/amd64等几种常见的。

docker pull docker.io/istio/examples-bookinfo-productpage-v1:1.18.0 --platform linux/amd64

正常执行docker save -o打包、上传、docker load -i导入镜像,启动服务即可。

在docker build镜像的时候,可以使用buildx和--platform参数指定架构版本。

docker buildx build --platform=linux/amd64 -t productpage-no-headers:1.1.0.amd .
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容