@@ -100,7 +100,9 @@ func (p *PortOpt) Set(value string) error {
100100
101101 p .ports = append (p .ports , pConfig )
102102 } else {
103- // short syntax
103+ // short syntax ([ip:]public:private[/proto])
104+ //
105+ // TODO(thaJeztah): we need an equivalent that handles the "ip-address" part without depending on the nat package.
104106 ports , portBindingMap , err := nat .ParsePortSpecs ([]string {value })
105107 if err != nil {
106108 return err
@@ -162,18 +164,17 @@ func ConvertPortToPortConfig(
162164 logrus .Warnf ("ignoring IP-address (%s:%s) service will listen on '0.0.0.0'" , net .JoinHostPort (binding .HostIP , binding .HostPort ), portProto .String ())
163165 }
164166
165- startHostPort , endHostPort , err := nat .ParsePortRange (binding .HostPort )
166-
167+ pr , err := network .ParsePortRange (binding .HostPort )
167168 if err != nil && binding .HostPort != "" {
168169 return nil , fmt .Errorf ("invalid hostport binding (%s) for port (%d)" , binding .HostPort , portProto .Num ())
169170 }
170171
171- for i := startHostPort ; i <= endHostPort ; i ++ {
172+ for p := range pr . All () {
172173 ports = append (ports , swarm.PortConfig {
173174 // TODO Name: ?
174175 Protocol : portProto .Proto (),
175176 TargetPort : uint32 (portProto .Num ()),
176- PublishedPort : uint32 (i ),
177+ PublishedPort : uint32 (p . Num () ),
177178 PublishMode : swarm .PortConfigPublishModeIngress ,
178179 })
179180 }
0 commit comments