mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-05-06 19:08:13 +00:00
Add support for all possible port definitions in services
Signed-off-by: Pablo Carranza Velez <pablo@resin.io>
This commit is contained in:
parent
cba3a8e5fe
commit
554d4789ff
@ -10,6 +10,9 @@ Duration = require 'duration-js'
|
|||||||
|
|
||||||
validRestartPolicies = [ 'no', 'always', 'on-failure', 'unless-stopped' ]
|
validRestartPolicies = [ 'no', 'always', 'on-failure', 'unless-stopped' ]
|
||||||
|
|
||||||
|
# Adapted from https://github.com/docker/docker-py/blob/master/docker/utils/ports.py#L3
|
||||||
|
PORTS_REGEX = /^(?:(?:([a-fA-F\d.:]+):)?([\d]*)(?:-([\d]+))?:)?([\d]+)(?:-([\d]+))?(?:\/(udp|tcp))?$/
|
||||||
|
|
||||||
parseMemoryNumber = (numAsString, defaultVal) ->
|
parseMemoryNumber = (numAsString, defaultVal) ->
|
||||||
m = numAsString?.toString().match(/^([0-9]+)([bkmg]?)$/)
|
m = numAsString?.toString().match(/^([0-9]+)([bkmg]?)$/)
|
||||||
if !m? and defaultVal?
|
if !m? and defaultVal?
|
||||||
@ -475,10 +478,19 @@ module.exports = class Service
|
|||||||
portBindings = {}
|
portBindings = {}
|
||||||
if @ports?
|
if @ports?
|
||||||
for port in @ports
|
for port in @ports
|
||||||
[ hostPort, containerPort ] = port.toString().split(':')
|
m = port.match(PORTS_REGEX)
|
||||||
containerPort ?= hostPort
|
if m? # Ignore invalid port mappings
|
||||||
exposedPorts[containerPort + '/tcp'] = {}
|
[ _unused, host = '', external, externalEnd, internal, internalEnd, protocol = 'tcp' ] = m
|
||||||
portBindings[containerPort + '/tcp'] = [ { HostIp: '', HostPort: hostPort } ]
|
external ?= internal
|
||||||
|
internalEnd ?= internal
|
||||||
|
externalEnd ?= external
|
||||||
|
externalRange = _.map([external..externalEnd], String)
|
||||||
|
internalRange = _.map([internal..internalEnd], String)
|
||||||
|
if externalRange.length == internalRange.length # Ignore invalid port mappings
|
||||||
|
for hostPort, ind in externalRange
|
||||||
|
containerPort = internalRange[ind]
|
||||||
|
exposedPorts["#{containerPort}/#{protocol}"] = {}
|
||||||
|
portBindings["#{containerPort}/#{protocol}"] = [ { HostIp: host, HostPort: hostPort } ]
|
||||||
if @expose?
|
if @expose?
|
||||||
for port in @expose
|
for port in @expose
|
||||||
exposedPorts[port + '/tcp'] = {}
|
exposedPorts[port + '/tcp'] = {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user