背景
一般测试/生产集群上不通外网,导致启动一些组件/服务会拉不到镜像。
通常情况下,研发会在自己的本地机器上拉下来镜像并打包上传到服务器上,再导入到集群的镜像仓库中。
报错
运行镜像,报错:
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 .