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

无法登录Nexus3 Docker仓库:/v2路径返回404错误

问题描述

执行命令 docker login https://registry.mysite.online 时返回错误:

Error response from daemon: login attempt to https://registry.mysite.online/v2/ failed with status: 404 Not Found

已在Nexus中添加Docker托管仓库(未指定端口),Nexus部署在Nginx反向代理后,当前Helm仓库可正常使用(排除TLS问题)。尝试过为5000端口单独配置server规则、为仓库设置443 HTTPS端口,均仍返回相同404错误。

Nginx代理配置如下:

http {
    client_body_buffer_size     32k;
    client_header_buffer_size   8k;
    large_client_header_buffers 8 64k;
    proxy_send_timeout        120;
    proxy_read_timeout        300;
    proxy_buffering           off;
    tcp_nodelay               on;
    ssl_certificate /etc/letsencrypt/live/mysite.online/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mysite.online/privkey.pem;
    ssl_dhparam /usr/lib/python3/dist-packages/certbot/ssl-dhparams.pem;
    client_max_body_size      1G;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;


    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    include /etc/nginx/conf.d/*.conf;


  server {
    server_name             registry.mysite.online;
    listen                  *:443 ssl;
    location / {
      proxy_pass            http://localhost:8081/;
      proxy_redirect        off;
      proxy_set_header      Host $host;
      proxy_set_header      X-Real-IP $remote_addr;
      proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header      X-Forwarded-Host $server_name;
      proxy_set_header      X-Forwarded-Proto $scheme;
    }
  }
}
解决方案

1. 修正Nginx反向代理路径映射

Docker客户端默认请求/v2/端点,但当前Nginx将所有请求转发到Nexus根目录/,而Nexus的Docker仓库需要通过仓库专属路径访问。需调整Nginx配置,将Docker API请求转发到对应仓库的路径:

替换原server块为以下内容(注意将docker-hosted替换为你实际的Nexus Docker托管仓库名称):

server {
  server_name             registry.mysite.online;
  listen                  *:443 ssl;

  # 处理Docker V2 API请求
  location /v2/ {
    proxy_pass            http://localhost:8081/repository/docker-hosted/v2/;
    proxy_redirect        off;
    proxy_set_header      Host $host;
    proxy_set_header      X-Real-IP $remote_addr;
    proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header      X-Forwarded-Host $server_name;
    proxy_set_header      X-Forwarded-Proto $scheme;
    # 适配Docker长连接需求
    proxy_http_version 1.1;
    proxy_set_header Connection "";
  }

  # 兼容Docker V1登录请求(按需开启)
  location /v1/ {
    proxy_pass            http://localhost:8081/repository/docker-hosted/v1/;
    proxy_redirect        off;
    proxy_set_header      Host $host;
    proxy_set_header      X-Real-IP $remote_addr;
    proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header      X-Forwarded-Host $server_name;
    proxy_set_header      X-Forwarded-Proto $scheme;
  }
}

2. 确认Nexus Docker仓库配置

  • 登录Nexus管理界面,进入目标Docker托管仓库的配置页。
  • 确保仓库的Repository Path设置正确(默认格式为/repository/<仓库名称>/)。
  • 若使用旧版Docker客户端,开启Allow Docker V1 API选项。
  • 无需为仓库单独配置端口(路径式访问模式下,端口由Nginx统一处理)。

3. 验证配置

  • 重启Nginx使配置生效:sudo systemctl restart nginx
  • 重新执行登录命令:docker login https://registry.mysite.online
  • 若问题仍存在,检查Nexus访问日志(/opt/sonatype/nexus/sonatype-work/nexus3/log/access.log)与Nginx日志,确认请求是否正确到达目标仓库路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:45:28