diff --git a/lib/datasource/docker.js b/lib/datasource/docker.js index 23fb2efb17b3911f9ca926694df76982291098aa..4a115d0d491bac8f6422af5e6416bee75eca2753 100644 --- a/lib/datasource/docker.js +++ b/lib/datasource/docker.js @@ -38,13 +38,21 @@ async function getAuthHeaders(registry, repository) { Authorization: `Bearer ${token}`, Accept: 'application/vnd.docker.distribution.manifest.v2+json', }; - } catch (err) { - // istanbul ignore if + } catch (err) /* istanbul ignore next */ { + if (err.statusCode === 401) { + logger.info({ registry, repository }, 'Unauthorized docker lookup'); + logger.debug({ + err, + message: err.message, + body: err.response ? err.response.body : undefined, + }); + return null; + } if (err.statusCode >= 500 && err.statusCode < 600) { logger.warn({ err }, 'docker registry failure: internal error'); throw new Error('registry-failure'); } - logger.info('Error obtaining docker token'); + logger.warn('Error obtaining docker token'); return null; } } @@ -56,6 +64,10 @@ async function getDigest(registry, name, tag = 'latest') { try { const url = `${massagedRegistry}/v2/${repository}/manifests/${tag}`; const headers = await getAuthHeaders(massagedRegistry, repository); + if (!headers) { + logger.info('No docker auth found - returning'); + return null; + } headers.accept = 'application/vnd.docker.distribution.manifest.v2+json'; const digest = (await got(url, { json: true, headers, timeout: 10000 })) .headers['docker-content-digest']; @@ -63,10 +75,12 @@ async function getDigest(registry, name, tag = 'latest') { return digest; } catch (err) /* istanbul ignore next */ { if (err.statusCode === 401) { - logger.info( - { err, body: err.response ? err.response.body : undefined, name, tag }, - 'Lookup is unauthorized (private image)' - ); + logger.info({ registry, repository }, 'Unauthorized docker lookup'); + logger.debug({ + err, + message: err.message, + body: err.response ? err.response.body : undefined, + }); return null; } if (err.statusCode === 404) { @@ -106,6 +120,9 @@ async function getTags(registry, name) { try { let url = `${massagedRegistry}/v2/${repository}/tags/list?n=10000`; const headers = await getAuthHeaders(massagedRegistry, repository); + if (!headers) { + return null; + } let tags = []; let page = 1; do {