You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Artifactory中Docker Registry登录失败:返回Forbidden错误求助

Artifactory Docker Registry登录出现Forbidden(403)的解决办法

最近在把Artifactory配置成Docker Registry的时候踩了个坑——登录一直报Forbidden,折腾好一阵才搞定,把过程和解决方法分享给遇到同样问题的朋友:

问题场景

执行Docker登录命令:

docker login art.example.com

输入用户名和密码后,返回错误:

Username: xxxx
Password: xxxx
Error response from daemon: Get https://art.example.com/v2/: unknown: Forbidden

查看Artifactory日志,发现这条关键记录:

20180510195825|1|REQUEST|XX.XX.XX.XX|non_authenticated_user|GET|/api/docker/v2/|HTTP/1.1|403|0

日志显示请求用户是non_authenticated_user,说明要么认证信息没被正确传递,要么路由配置有问题导致Artifactory无法识别请求的认证身份。

解决方法(2019-01-09已验证解决)

问题根源在Nginx代理的配置上,需要调整路由规则,确保Docker的/v2/请求被正确转发到Artifactory的Docker API端点。修改后的完整Nginx配置如下:

(...)
listen 443 ssl;
(...)
# Docker traffic
# Redirect (most) requests to /v2/* to the Docker Registry
location /v2/ {
    add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
    rewrite ^/(v2)/$ /api/docker/$1;
    rewrite ^/(v2)/([^\/]*)/(.*) /api/docker/$2/$1/$3;
    proxy_set_header Host $http_host;
}
# Artifactory traffic
location / {
    rewrite ^/$ /artifactory/webapp/ redirect;
    rewrite ^/artifactory/?(/webapp)?$ /artifactory/webapp/ redirect;
    if ( $request_uri ~ ^/artifactory/(.*)$ ) {
        proxy_pass http://art.example.com:8081/artifactory/$1;
    }
    proxy_pass_header Server;
    proxy_pass http://art.example.com:8081/artifactory/;
    proxy_set_header Host $http_host;
    proxy_set_header X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host/artifactory;
}

关键调整说明

  • 单独为/v2/路径配置路由,通过rewrite规则将Docker的v2请求映射到Artifactory的/api/docker/专属端点
  • 确保Host请求头正确传递,避免Artifactory因域名不匹配拒绝请求
  • 保留Artifactory自身的请求路由规则,保证Web界面和其他API的正常访问

修改完成后重启Nginx服务,再次执行docker login art.example.com就能正常完成登录了。

内容的提问来源于stack exchange,提问作者Squirrel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:32