{"record":{"id":"08effb1ea768e120","repo":"goharbor/harbor","slug":"login-to-dockerhub-error-v","errorCode":null,"errorMessage":"login to dockerhub error: %v","messagePattern":"login to dockerhub error: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/pkg/reg/adapter/dockerhub/client.go","lineNumber":69,"sourceCode":"\t\t\tTimeout: config.RegistryHTTPClientTimeout(),\n\t\t},\n\t}\n\n\t// For anonymous access, no need to refresh token.\n\tif registry.Credential == nil ||\n\t\t(len(registry.Credential.AccessKey) == 0 && len(registry.Credential.AccessSecret) == 0) {\n\t\treturn client, nil\n\t}\n\n\t// Login to DockerHub to get access token. Tokens expire after 10 minutes;\n\t// subsequent calls via Do() will refresh the token automatically.\n\tclient.credential = LoginCredential{\n\t\tIdentifier: registry.Credential.AccessKey,\n\t\tSecret:     registry.Credential.AccessSecret,\n\t}\n\terr := client.refreshToken()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"login to dockerhub error: %v\", err)\n\t}\n\n\treturn client, nil\n}\n\n// refreshToken authenticates with Docker Hub via POST /v2/auth/token and stores\n// the resulting bearer token. Callers must hold c.mu before calling this method.\nfunc (c *Client) refreshToken() error {\n\tb, err := json.Marshal(c.credential)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal credential error: %v\", err)\n\t}\n\n\trequest, err := http.NewRequest(http.MethodPost, baseURL+loginPath, bytes.NewReader(b))\n\tif err != nil {\n\t\treturn err\n\t}\n\trequest.Header.Set(\"Content-Type\", \"application/json\")","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/goharbor/harbor/blob/7b2fd08cc568955cca339afeefab27372840d936/src/pkg/reg/adapter/dockerhub/client.go#L51-L87","documentation":"Error \"login to dockerhub error: %v\" thrown in goharbor/harbor.","triggerScenarios":"Thrown at src/pkg/reg/adapter/dockerhub/client.go:69 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7b2fd08cc568955cca339afeefab27372840d936","analyzedAt":"2026-08-16T00:00:10.961Z","schemaVersion":2},"datasetVersion":"2026-08-16T03:17:38.424Z"}