diff --git a/lib/manager/dockerfile/extract.js b/lib/manager/dockerfile/extract.js
index fb6a226ec94141ae318a70e4c4eefc6a38ecc0aa..3950da0cd6acacac88f15ceb3edecbe2bba10198 100644
--- a/lib/manager/dockerfile/extract.js
+++ b/lib/manager/dockerfile/extract.js
@@ -57,7 +57,10 @@ function getDep(currentFrom) {
   };
   const purl = getPurl(dep.dockerRegistry, dep.depName, dep.tagSuffix);
   dep.purl = purl;
-  if (dep.depName === 'node' || dep.depName.endsWith('/node')) {
+  if (
+    (dep.depName === 'node' || dep.depName.endsWith('/node')) &&
+    dep.depName !== 'calico/node'
+  ) {
     dep.commitMessageTopic = 'Node.js';
   }
   return dep;
diff --git a/lib/workers/repository/updates/flatten.js b/lib/workers/repository/updates/flatten.js
index 10ccf0e3836266fb4fd77461b21d2146ada56317..702b331683486544111d675c046d81fcdfbd0f3e 100644
--- a/lib/workers/repository/updates/flatten.js
+++ b/lib/workers/repository/updates/flatten.js
@@ -63,7 +63,8 @@ function flattenUpdates(config, packageFiles) {
               : undefined;
             if (
               updateConfig.language === 'docker' &&
-              updateConfig.depName.match(/(^|\/)node$/)
+              updateConfig.depName.match(/(^|\/)node$/) &&
+              updateConfig.depName !== 'calico/node'
             ) {
               updateConfig.managerBranchPrefix = '';
               updateConfig.depNameSanitized = 'node';
diff --git a/test/manager/dockerfile/__snapshots__/extract.spec.js.snap b/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
index da952dea32bacac02538dbad1c309dd98a50b7d7..4b57e774e09837f3d3a51e63f844371ff49684b2 100644
--- a/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
+++ b/test/manager/dockerfile/__snapshots__/extract.spec.js.snap
@@ -119,6 +119,27 @@ Array [
 ]
 `;
 
+exports[`lib/manager/dockerfile/extract extractDependencies() handles calico/node 1`] = `
+Array [
+  Object {
+    "currentDepTag": "calico/node",
+    "currentDepTagDigest": "calico/node",
+    "currentDigest": undefined,
+    "currentFrom": "calico/node",
+    "currentTag": undefined,
+    "currentValue": undefined,
+    "depName": "calico/node",
+    "dockerRegistry": undefined,
+    "fromPrefix": "FROM",
+    "fromSuffix": "",
+    "lineNumber": 0,
+    "purl": "pkg:docker/calico/node",
+    "tagSuffix": undefined,
+    "versionScheme": "docker",
+  },
+]
+`;
+
 exports[`lib/manager/dockerfile/extract extractDependencies() handles comments 1`] = `
 Array [
   Object {
diff --git a/test/manager/dockerfile/extract.spec.js b/test/manager/dockerfile/extract.spec.js
index 6d929adc9127392885d5cb934b60835da7d58c01..2f04bdb793331409ef891c913cd8249216d174c1 100644
--- a/test/manager/dockerfile/extract.spec.js
+++ b/test/manager/dockerfile/extract.spec.js
@@ -140,5 +140,9 @@ describe('lib/manager/dockerfile/extract', () => {
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
+    it('handles calico/node', () => {
+      const res = extractDependencies('FROM calico/node\n', config).deps;
+      expect(res).toMatchSnapshot();
+    });
   });
 });
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index ecfaecaac9cfc8d2fdfe9a81aa2fc2a81bdbbb2c..584595b2c5ef83eb0120db80f3ded66327357037 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -290,5 +290,74 @@ Array [
     "warnings": Array [],
     "yarnrc": null,
   },
+  Object {
+    "assignees": Array [],
+    "automerge": false,
+    "automergeComment": "automergeComment",
+    "automergeType": "pr",
+    "branchName": "{{{branchPrefix}}}{{{managerBranchPrefix}}}{{{branchTopic}}}",
+    "branchPrefix": "renovate/",
+    "branchTopic": "{{{depNameSanitized}}}-{{{newMajor}}}{{#if isPatch}}.{{{newMinor}}}{{/if}}.x",
+    "bumpVersion": null,
+    "commitBody": null,
+    "commitMessage": "{{{commitMessagePrefix}}} {{{commitMessageAction}}} {{{commitMessageTopic}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}",
+    "commitMessageAction": "Update",
+    "commitMessageExtra": "to {{#if isMajor}}v{{{newMajor}}}{{else}}{{#if isSingleVersion}}v{{{toVersion}}}{{else}}{{{newValue}}}{{/if}}{{/if}}",
+    "commitMessagePrefix": null,
+    "commitMessageSuffix": null,
+    "commitMessageTopic": "{{{depName}}} Docker tag",
+    "copyLocalLibs": false,
+    "depName": "calico/node",
+    "depNameSanitized": "calico-node",
+    "errors": Array [],
+    "gitAuthor": null,
+    "gitPrivateKey": null,
+    "group": Object {
+      "branchTopic": "{{{groupSlug}}}",
+      "commitMessageTopic": "{{{groupName}}} Docker tags",
+      "prBody": "This Pull Request updates Dockerfiles to use image digests.\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#each upgrades as |upgrade|}}\\n-   {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{{depName}}}\`{{/if}}: \`{{upgrade.newDigest}}\`\\n{{/each}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    },
+    "groupName": null,
+    "groupSlug": null,
+    "labels": Array [],
+    "language": "docker",
+    "lazyGrouping": true,
+    "manager": "dockerfile",
+    "managerBranchPrefix": "docker-",
+    "newValue": "3.2.0",
+    "npmToken": null,
+    "npmrc": null,
+    "packageFile": "Dockerfile",
+    "prBody": "This Pull Request updates Docker base image \`{{{depName}}}\` from tag \`{{{currentTag}}}\` to new tag \`{{{newValue}}}{{#if tagSuffix}}-{{{tagSuffix}}}{{/if}}\`. For details on Renovate's Docker support, please visit https://renovatebot.com/docs/docker\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    "prConcurrentLimit": 0,
+    "prCreation": "immediate",
+    "prHourlyLimit": 0,
+    "prNotPendingHours": 25,
+    "prTitle": null,
+    "raiseDeprecationWarnings": true,
+    "rebaseStalePrs": null,
+    "recreateClosed": false,
+    "requiredStatusChecks": Array [],
+    "reviewers": Array [],
+    "rollbackPrs": false,
+    "schedule": Array [],
+    "semanticCommitScope": "deps",
+    "semanticCommitType": "chore",
+    "semanticCommits": null,
+    "skipInstalls": true,
+    "statusCheckVerify": false,
+    "timezone": null,
+    "unpublishSafe": false,
+    "updateLockFiles": true,
+    "updateNotScheduled": true,
+    "vulnerabilityAlerts": Object {
+      "commitMessageSuffix": "[SECURITY]",
+      "enabled": true,
+      "groupName": null,
+      "schedule": Array [],
+    },
+    "warnings": Array [],
+    "yarnrc": null,
+  },
 ]
 `;
diff --git a/test/workers/repository/updates/flatten.spec.js b/test/workers/repository/updates/flatten.spec.js
index 3b227cc29f420fa5b2137e146f1b2359e7d1c891..b9de9e5feed62b88ae0b953214ece4400ca22773 100644
--- a/test/workers/repository/updates/flatten.spec.js
+++ b/test/workers/repository/updates/flatten.spec.js
@@ -41,6 +41,16 @@ describe('workers/repository/updates/flatten', () => {
               },
             ],
           },
+          {
+            packageFile: 'Dockerfile',
+            deps: [
+              {
+                depName: 'calico/node',
+                language: 'docker',
+                updates: [{ newValue: '3.2.0' }],
+              },
+            ],
+          },
         ],
       };
       const res = await flattenUpdates(config, packageFiles);