Administrator
发布于 2022-11-03 / 689 阅读 / 0 评论 / 0 点赞

docker 同一基础镜像跨架构踩坑记录

问题:dockerfile打包报错

failed to get destination image "sha256:7be06736beffaa2a477317e1537dd356b42a2048e07248affdee915dc39345f2": image with reference sha256:7be06736beffaa2a477317e1537dd356b42a2048e07248affdee915dc39345f2 was found but does not match the specified platform: wanted linux/amd64, actual: linux/arm64/v8

我本地是M1,需要打包一个服务到linux上。dockerfile非常简单

FROM centos
RUN mkdir /cmd
COPY . /cmd
WORKDIR /cmd
RUN chmod 777 /cmd
CMD ["/cmd/admin","server","-c","./"]

报错内容说的非常清楚,但是我就很奇怪,因为我之前打包的指令是没有出现过这个错误的,指令如下

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags=jsoniter .

最近本地在写学习编写compose,百度一下问题,找到答案
参考地址

原因是我没有清理基础镜像,dockerfile中

FROM centos

使用的是我本地的镜像,这个镜像是linux/arm64/v8 ,所以我打包推送dockerhub的时候出现错误。

清理本地centos镜像后恢复正常打包推送。从上面参考中提到的可以指定对应的镜像哈希或者避免使用同一基础镜像即可。