Skip to content
Snippets Groups Projects
Select Git revision
  • 88f9bb40f75d3620d502277ab7006c44fe3260b1
  • master default
2 results

docker.js

Blame
  • docker.js 1.09 KiB
    const got = require('got');
    
    module.exports = {
      getDigest,
    };
    
    async function getDigest(name, tag, logger) {
      const repository = name.includes('/') ? name : `library/${name}`;
      try {
        const authUrl = `https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repository}:pull`;
        logger.debug(`Obtaining docker registry token for ${repository}`);
        const { token } = (await got(authUrl, { json: true })).body;
        if (!token) {
          logger.warn('Failed to obtain docker registry token');
          return null;
        }
        logger.debug('Got docker registry token');
        const url = `https://index.docker.io/v2/${repository}/manifests/${tag ||
          'latest'}`;
        const headers = {
          Authorization: `Bearer ${token}`,
          Accept: 'application/vnd.docker.distribution.manifest.v2+json',
        };
        const digest = (await got(url, { json: true, headers })).headers[
          'docker-content-digest'
        ];
        logger.debug({ digest }, 'Got docker digest');
        return digest;
      } catch (err) {
        logger.warn({ err, name, tag }, 'Error getting docker image digest');
        return null;
      }
    }