Docker Build报403 Forbidden:拉取私有镜像元数据失败求助
针对你执行docker build -t http2cas4:local --build-arg CI_REGISTRY=dockerhub.alea.ca --build-arg CAS_JBOSS_VERSION=1.0.0 .时出现的403错误,给出以下排查步骤:
确认本地Docker已登录私有仓库
即使IT确认你有权限,本地Docker未登录目标私有仓库的话,拉取镜像时仍会返回403。执行命令:docker login dockerhub.alea.ca输入你的账号密码,确保登录成功后再重新执行build命令。
手动验证镜像拉取权限
直接执行拉取命令测试能否获取镜像:docker pull dockerhub.alea.ca/firefly/product/casino/jboss:1.0.0如果这个命令也返回403,说明要么权限配置存在问题(比如你的账号没有该镜像的拉取权限),要么镜像地址/标签有误;如果能拉取成功,再排查build命令或Dockerfile的参数传递问题。
检查构建参数是否正确传递
核对build命令中的--build-arg参数,确认CI_REGISTRY和CAS_JBOSS_VERSION的取值没有拼写错误,比如dockerhub.alea.ca是否完整正确,1.0.0标签是否与仓库中的镜像一致。验证Dockerfile的ARG使用逻辑
可以临时调整Dockerfile,给ARG设置默认值,排除参数传递异常:ARG CI_REGISTRY=dockerhub.alea.ca ARG CAS_JBOSS_VERSION=1.0.0 FROM ${CI_REGISTRY}/firefly/product/casino/jboss:${CAS_JBOSS_VERSION} COPY templates/config/* /config/ COPY templates/logs/* /app/jboss4/server/default/conf/ COPY target/http2cas4.war /deploy/然后执行简化的build命令:
docker build -t http2cas4:local .,看是否能正常拉取镜像。确认仓库中镜像是否存在
联系IT再次确认dockerhub.alea.ca/firefly/product/casino/jboss:1.0.0这个镜像确实已推送到仓库中,避免因镜像未上传或标签错误导致的403(部分私有仓库会对不存在的镜像返回403而非404)。
内容的提问来源于stack exchange,提问作者Uzi

