M1芯片MacOS13.x下Docker构建镜像遇403 Forbidden错误求助
问题描述
在搭载M1芯片的MacOS 13.x系统中,执行以下Docker镜像构建命令:
docker build -t reddwarf/postgresql:1.0.0 .
触发403 Forbidden错误,完整错误输出如下:
➜ postgresql git:(main) ✗ docker build -t reddwarf/postgresql:1.0.0 . [+] Building 0.4s (3/3) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 74B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => ERROR [internal] load metadata for docker.io/bitnami/postgresql-repmgr:14-debian-11 0.2s ------ > [internal] load metadata for docker.io/bitnami/postgresql-repmgr:14-debian-11: ------ failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status code [manifests 14-debian-11]: 403 Forbidden
使用的Dockerfile内容如下:
FROM --platform=linux/amd64 bitnami/postgresql-repmgr:14-debian-11 # switch to root to use apt USER root # install depandanices and postgreSQL required scripts RUN apt update && apt install -y gnupg postgresql-common apt-transport-https lsb-release wget # configure TS repo RUN echo "deb https://packagecloud.io/timescale/timescaledb/debian/ bullseye main" >> /etc/apt/sources.list.d/timescaledb.list && \ wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | apt-key add - # install TS RUN echo "\n" | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh && apt update && apt install -y timescaledb-2-postgresql-14 # copy required assets to bitnami's postgreSQL directory RUN cp -r /usr/share/postgresql/14/extension/timescaledb* /opt/bitnami/postgresql/share/extension/ && \ cp -r /usr/lib/postgresql/14/lib/timescaledb* /opt/bitnami/postgresql/lib/ # return to the normal user USER 1001
已尝试但未解决问题的操作:
- 执行
docker login并登录成功 - 在基础镜像声明中添加
--platform=linux/amd64参数 - 预拉取
bitnami/postgresql-repmgr:14-debian-11镜像成功
解决方案
方法1:直接使用本地已拉取的镜像
既然已经成功拉取了目标基础镜像,修改Dockerfile的FROM行,指定使用本地镜像的哈希值或ID,避免构建时远程拉取元数据:
- 获取镜像哈希值:
docker inspect --format='{{.Id}}' bitnami/postgresql-repmgr:14-debian-11
- 修改Dockerfile的FROM行:
FROM --platform=linux/amd64 bitnami/postgresql-repmgr:14-debian-11@sha256:[你的镜像哈希值]
或者直接用镜像ID替换标签:
FROM --platform=linux/amd64 [镜像ID]
方法2:禁用构建缓存
执行构建命令时添加--no-cache参数,强制Docker跳过缓存,重新处理镜像元数据:
docker build --no-cache -t reddwarf/postgresql:1.0.0 .
方法3:更换Docker镜像源
Bitnami镜像可能存在Docker Hub访问限制,修改Docker配置使用国内镜像源:
- 编辑
~/.docker/daemon.json文件(不存在则新建):
{ "registry-mirrors": ["https://hub-mirror.c.163.com"] }
- 重启Docker服务后再执行构建命令。
方法4:使用buildx跨平台构建
M1芯片上使用buildx工具执行跨平台构建,可绕过部分元数据拉取问题:
docker buildx build --platform linux/amd64 -t reddwarf/postgresql:1.0.0 .
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

