diff --git a/lib/datasource/docker.js b/lib/datasource/docker.js
index 779688957cb504e59f3aeb32af67ebc997e12596..c836f91af1786f52255ace4829d9da49856a1876 100644
--- a/lib/datasource/docker.js
+++ b/lib/datasource/docker.js
@@ -72,6 +72,10 @@ async function getAuthHeaders(registry, repository) {
       logger.debug({ err });
       return null;
     }
+    if (err.statusCode === 429) {
+      logger.warn({ err }, 'docker registry failure: too many requests');
+      throw new Error('registry-failure');
+    }
     if (err.statusCode >= 500 && err.statusCode < 600) {
       logger.warn({ err }, 'docker registry failure: internal error');
       throw new Error('registry-failure');
@@ -132,6 +136,10 @@ async function getDigest(config, newValue) {
       );
       return null;
     }
+    if (err.statusCode === 429) {
+      logger.warn({ err }, 'docker registry failure: too many requests');
+      throw new Error('registry-failure');
+    }
     if (err.statusCode >= 500 && err.statusCode < 600) {
       logger.warn(
         {
@@ -208,6 +216,10 @@ async function getPkgReleases(purl) {
       logger.info({ purl }, 'Not authorised to look up docker tags');
       return null;
     }
+    if (err.statusCode === 429) {
+      logger.warn({ purl, err }, 'docker registry failure: too many requests');
+      throw new Error('registry-failure');
+    }
     if (err.statusCode >= 500 && err.statusCode < 600) {
       logger.warn({ purl, err }, 'docker registry failure: internal error');
       throw new Error('registry-failure');