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

GitLab私有容器仓库Docker推送失败:目标IP解析异常

问题描述
  • LXC容器部署GitLab实例,通过NGINX反向代理将git.example.com和registry.git.example.com路由至容器
  • docker login registry.git.example.com登录成功,但推送镜像时报错:dial tcp <CLIENT IP>:80: i/o timeout,Docker尝试连接客户端公网IP而非GitLab服务器IP
  • GitLab宿主机本地执行docker push localhost:5090正常,且可通过域名拉取镜像,仅推送操作异常
  • 切换VPN后,Docker尝试连接的IP变为VPN的IP
  • 调整gitlab.rb和NGINX配置后问题仍未解决,Git功能反向代理正常
排查与解决方案

1. 检查GitLab Registry回调配置

GitLab Registry推送时会触发回调,若回调地址配置错误,会引导Docker客户端连接错误IP:

  • 查看gitlab.rb中Registry核心配置:
    gitlab_rails['registry_api_url'] = 'http://localhost:5090' # 需指向容器内Registry服务,而非外部域名
    gitlab_rails['registry_host'] = 'registry.git.example.com'
    gitlab_rails['registry_port'] = 443
    gitlab_rails['registry_external_url'] = 'https://registry.git.example.com'
    
  • 执行gitlab-ctl reconfigure生效配置,随后重启相关服务:gitlab-ctl restart registry

2. 修正NGINX反向代理配置

确保NGINX正确传递Host头,避免回调地址被错误替换:

server {
  listen 443 ssl http2;
  server_name registry.git.example.com;

  ssl_certificate /path/to/your/cert.pem;
  ssl_certificate_key /path/to/your/key.pem;

  location / {
    proxy_pass http://<LXC容器内网IP>:5090;
    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-Proto $scheme;
    proxy_read_timeout 300s;
    proxy_connect_timeout 300s;
  }
}
  • 重启NGINX:systemctl restart nginx

3. 清理Docker客户端本地缓存

Docker客户端可能因DNS缓存或本地配置产生错误解析:

  • 重启Docker服务清除缓存:systemctl restart docker
  • 检查/etc/hosts是否存在registry.git.example.com的错误映射
  • 执行nslookup registry.git.example.com确认解析到GitLab服务器公网IP

4. 验证Registry端点响应

用curl测试Registry配置,确认返回的回调地址正确:

curl -v https://registry.git.example.com/v2/
  • 检查响应中WWW-Authenticate头的realm字段,需指向https://registry.git.example.com而非客户端IP

5. 调试Docker推送流程

开启Docker调试模式,查看推送时的完整请求链路:

DOCKER_DEBUG=1 docker push registry.git.example.com/<your-image>:<tag>
  • 重点关注GET /v2/token和后续推送请求的目标地址,确认是否被错误引导至客户端IP

6. 检查GitLab Registry日志

查看Registry日志确认回调逻辑是否正常:

tail -f /var/log/gitlab/registry/current
  • 若日志中出现客户端IP相关的回调请求,说明registry_api_url或registry_external_url配置错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:48:38