diff --git a/src/docker.js b/src/docker.js index 37fcb4422..b30e909f2 100644 --- a/src/docker.js +++ b/src/docker.js @@ -690,8 +690,10 @@ function parseImageRef(ref) { // a ref is like registry.docker.com/cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4 // registry.docker.com is registry name . cloudron is namespace . base is image name . cloudron/base is repository path // registry.docker.com/cloudron/base is fullRepositoryName - const result = { fullRepositoryName: null, tag: null, digest: null }; + const result = { fullRepositoryName: null, registry: null, tag: null, digest: null }; result.fullRepositoryName = ref.split(/[:@]/)[0]; + const parts = result.fullRepositoryName.split('/'); + result.registry = parts.length === 3 ? parts[0] : null; let remaining = ref.substr(result.fullRepositoryName.length); if (remaining.startsWith(':')) { result.tag = remaining.substr(1).split('@', 1)[0]; diff --git a/src/test/docker-test.js b/src/test/docker-test.js index 8cbdfae7b..6530c7f78 100644 --- a/src/test/docker-test.js +++ b/src/test/docker-test.js @@ -22,10 +22,10 @@ describe('docker', function () { }); it('parseImageRef', async function () { - expect(docker.parseImageRef('cloudron/base')).to.eql({ fullRepositoryName: 'cloudron/base', tag: null, digest: null }); - expect(docker.parseImageRef('cloudron/base:4.2.0')).to.eql({ fullRepositoryName: 'cloudron/base', tag: '4.2.0', digest: null }); - expect(docker.parseImageRef('cloudron/base@sha256:xx')).to.eql({ fullRepositoryName: 'cloudron/base', tag: null, digest: 'xx' }); - expect(docker.parseImageRef('cloudron/base:4.2.0@sha256:xx')).to.eql({ fullRepositoryName: 'cloudron/base', tag: '4.2.0', digest: 'xx' }); - expect(docker.parseImageRef('registry.com/cloudron/base:4.2.0@sha256:xx')).to.eql({ fullRepositoryName: 'registry.com/cloudron/base', tag: '4.2.0', digest: 'xx' }); + expect(docker.parseImageRef('cloudron/base')).to.eql({ fullRepositoryName: 'cloudron/base', registry: null, tag: null, digest: null }); + expect(docker.parseImageRef('cloudron/base:4.2.0')).to.eql({ fullRepositoryName: 'cloudron/base', registry: null, tag: '4.2.0', digest: null }); + expect(docker.parseImageRef('cloudron/base@sha256:xx')).to.eql({ fullRepositoryName: 'cloudron/base', registry: null, tag: null, digest: 'xx' }); + expect(docker.parseImageRef('cloudron/base:4.2.0@sha256:xx')).to.eql({ fullRepositoryName: 'cloudron/base', registry: null, tag: '4.2.0', digest: 'xx' }); + expect(docker.parseImageRef('registry.com/cloudron/base:4.2.0@sha256:xx')).to.eql({ fullRepositoryName: 'registry.com/cloudron/base', registry: 'registry.com', tag: '4.2.0', digest: 'xx' }); }); });