Nexus私有Docker仓库拉取镜像报manifest not found如何解决
故障排查与解决步骤
1 优先排查Docker认证上下文问题
虽然你执行了docker login登录成功,但docker-compose往往存在认证信息读取不到的情况:
- 如果你使用
sudo docker-compose up -d启动,root用户的/root/.docker/config.json中没有私有仓库的认证信息,相当于以匿名身份访问,触发401报错。可以先执行sudo docker login internal-registry.com:8335录入认证信息,再启动服务。 - 建议将当前用户加入docker用户组,避免使用sudo执行Docker相关命令,消除权限差带来的认证问题:
sudo gpasswd -a $USER docker newgrp docker
2 修正Nexus权限配置错误
你配置的匿名角色权限存在拼写错误:
你写的权限是nx-repository-view-*-*-*-broswe,正确的权限名为nx-repository-view-*-*-*-browse,拼写错误会导致权限不生效,匿名用户实际没有仓库读取/浏览权限,所以返回401后拉取失败。修正权限后等待1-2分钟生效再重新拉取。
3 确认镜像路径与仓库配置匹配
你当前拉取的镜像地址是internal-registry.com:8335/prometheus:latest,对应Nexus会默认访问library路径下的镜像(和服务端日志中的/v2/library/prometheus/一致),如果你的镜像存储路径不匹配就会找不到manifest:
- 如果prometheus镜像存放在名为
docker-hosted的私有托管仓库中,拉取地址需要改为internal-registry.com:8335/docker-hosted/prometheus:latest - 如果你使用的是DockerHub代理仓库,要确认Nexus服务器本身可以正常访问公网DockerHub,否则无法拉取缓存不存在的镜像
4 补充验证步骤
- 先跳过docker-compose直接用原生Docker命令测试拉取:
docker pull internal-registry.com:8335/prometheus:latest,如果同样报错说明是镜像库本身的配置问题,否则就是docker-compose的认证上下文问题 - 登录Nexus UI,进入对应仓库的浏览页面,确认
prometheus镜像的latest标签真实存在,避免标签写错导致manifest找不到 - 检查Docker配置文件
/etc/docker/daemon.json,确认已经添加私有仓库的非信任配置:
配置完成后执行{ "insecure-registries": ["internal-registry.com:8335"] }systemctl daemon-reload && systemctl restart docker重启Docker生效。
内容的提问来源于stack exchange,提问作者user4948798
相关产品推荐
相关产品推荐

