mirror of
https://github.com/danbulant/docker-compose
synced 2026-06-24 17:31:53 +00:00
fix: fix mapping ipv6-based port mappings
This commit is contained in:
parent
48c9f0841a
commit
21b63cbc53
2 changed files with 30 additions and 21 deletions
|
|
@ -4,26 +4,35 @@ const mapPorts = (
|
||||||
mapped?: { address: string; port: number }
|
mapped?: { address: string; port: number }
|
||||||
exposed: { port: number; protocol: string }
|
exposed: { port: number; protocol: string }
|
||||||
}> => {
|
}> => {
|
||||||
const result = !ports
|
if (!ports) {
|
||||||
? []
|
return []
|
||||||
: (() => {
|
}
|
||||||
return ports.split(',').map((untypedPort) => {
|
|
||||||
const exposedFragments = untypedPort.trim().split('->')
|
|
||||||
|
|
||||||
const [port, protocol] =
|
return ports.split(',').map((untypedPort) => {
|
||||||
exposedFragments.length === 1
|
const exposedFragments = untypedPort.trim().split('->')
|
||||||
? exposedFragments[0].split('/')
|
|
||||||
: exposedFragments[1].split('/')
|
const [port, protocol] =
|
||||||
const [address, mappedPort] =
|
exposedFragments.length === 1
|
||||||
exposedFragments.length === 2 ? exposedFragments[0].split(':') : []
|
? exposedFragments[0].split('/')
|
||||||
return {
|
: exposedFragments[1].split('/')
|
||||||
exposed: { port: Number(port), protocol },
|
|
||||||
...(address &&
|
const mapped = exposedFragments[0]
|
||||||
mappedPort && { mapped: { port: Number(mappedPort), address } })
|
const lastDoubleColon = mapped.lastIndexOf(':')
|
||||||
}
|
|
||||||
})
|
if (lastDoubleColon === -1) {
|
||||||
})()
|
return {
|
||||||
return result
|
exposed: { port: Number(port), protocol },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const address = mapped.substr(0, lastDoubleColon)
|
||||||
|
const mappedPort = mapped.substr(lastDoubleColon + 1)
|
||||||
|
|
||||||
|
return {
|
||||||
|
exposed: { port: Number(port), protocol },
|
||||||
|
mapped: { port: Number(mappedPort), address },
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export default mapPorts
|
export default mapPorts
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ test('map multiple tcp ports exposed on ipv4 and ipv6 interfaces', () => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
exposed: { port: 443, protocol: 'tcp' },
|
exposed: { port: 443, protocol: 'tcp' },
|
||||||
mapped: { address: ':::', port: 443 }
|
mapped: { address: '::', port: 443 }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
exposed: { port: 80, protocol: 'tcp' },
|
exposed: { port: 80, protocol: 'tcp' },
|
||||||
|
|
@ -52,7 +52,7 @@ test('map multiple tcp ports exposed on ipv4 and ipv6 interfaces', () => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
exposed: { port: 80, protocol: 'tcp' },
|
exposed: { port: 80, protocol: 'tcp' },
|
||||||
mapped: { address: ':::', port: 80 }
|
mapped: { address: '::', port: 80 }
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue