构建Docker镜像遇元数据加载错误,我的Dockerfile存在什么问题?
解决Docker拉取amd64/nginx:stable镜像的平台匹配错误问题
问题核心
构建时触发以下错误:
ERROR: failed to solve: amd64/nginx:stable: failed to resolve source metadata for docker.io/amd64/nginx:stable: no match for platform in manifest: not found
解决方案
调整Dockerfile与构建参数
amd64/nginx镜像仓库已被官方废弃,官方统一使用主nginx镜像仓库(支持多架构),需按以下方式修改:
修改Dockerfile的FROM指令
将原Dockerfile第一行替换为:FROM nginx:stable COPY ./nginx/default.conf /etc/nginx/conf.d COPY ./nginx/proxy.conf /etc/nginx/includes/proxy.conf COPY ./data/ /var/www/html构建时指定amd64平台
在构建命令中添加--platform linux/amd64参数,强制拉取amd64架构的镜像:VERSION="v20240520" docker build --platform linux/amd64 --no-cache --rm --force-rm -t proxy:${VERSION} .
备选方案:Dockerfile内直接指定平台
若希望在Dockerfile中明确声明架构,可写成:
FROM --platform=linux/amd64 nginx:stable COPY ./nginx/default.conf /etc/nginx/conf.d COPY ./nginx/proxy.conf /etc/nginx/includes/proxy.conf COPY ./data/ /var/www/html
此时无需修改构建命令,直接执行原命令即可完成构建。
原因说明
原amd64/nginx是早期单架构镜像仓库,官方现已将其合并到主nginx仓库(提供多架构支持)。如果你的本地Docker环境默认平台不是amd64(比如M系列Mac的arm64),直接拉取废弃的amd64/nginx:stable会因仓库不存在失败,使用主仓库并指定平台即可解决问题。
内容的提问来源于stack exchange,提问作者jnemecz
相关产品推荐
相关产品推荐

