【解决了一个小问题】macbook m1上的docker build问题

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


1. docker hub限制的问题

因为docker build有问题,导致多次从docker hub拉去镜像,导致了超限:

docker pull amd64/alpine:3.12.0

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits.

官方站点的介绍文章为:Understanding Docker Hub Rate Limiting
看起来要充会员才行!!!他们挺缺钱的,心疼一下他们,不过我更缺啊。
终于在腾讯云上找到了同样的镜像:

docker pull ccr.ccs.tencentyun.com/edgeprivate/alpine-amd64:3.12

然后基础镜像依赖上面的镜像就ok了!

2. m1芯片build成了ARM版本的问题

Dockerfile的内容大致如下:

FROM alpine:3.12.0

ENV PATH /usr/local/bin:$PATH
ENV LANG C.UTF-8

ENV TZ=Asia/Shanghai
// 还有更多

执行编译命令:

docker build -f Dockerfile -t ccr.ccs.tencentyun.com/ahfuzhang/victoria-metrics-starter:v1.72.2 . --network=host

镜像推送到腾讯云后,启动容器出现如下错误:

standard_init_linux.go:228: exec user process caused: exec format error

搜索到了这篇文章说明这个问题:docker运行容器报错standard_init_linux.go:211: exec user process caused “exec format error“的可能解决办法

由此看来,m1芯片的macbook上打包镜像,默认会打包为ARM格式的

3. m1芯片上,docker build amd64格式的镜像

修改dockerfile如下:

FROM --platform=linux/amd64 ccr.ccs.tencentyun.com/edgeprivate/alpine-amd64:3.12

ENV PATH /usr/local/bin:$PATH
ENV LANG C.UTF-8

ENV TZ=Asia/Shanghai

然后docker build中也指定platform:

docker build -f Dockerfile -t ccr.ccs.tencentyun.com/ahfuzhang/victoria-metrics-starter:v1.77.2 . \
	--network=host \
	--platform=linux/amd64

一开始报错如下:

failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

还好也搜索到了文章:关于M1 docker build 报错

修改后重启docker,build成功!

posted on 2022-06-21 14:39  ahfuzhang  阅读(4250)  评论(0)    收藏  举报