mirror of https://github.com/docker/docs.git
specify public port
This commit is contained in:
parent
956491f853
commit
95d66ebc6b
26
network.go
26
network.go
|
@ -485,20 +485,38 @@ type Nat struct {
|
||||||
|
|
||||||
func parseNat(spec string) (*Nat, error) {
|
func parseNat(spec string) (*Nat, error) {
|
||||||
var nat Nat
|
var nat Nat
|
||||||
|
|
||||||
|
if strings.Contains(spec, ":") {
|
||||||
|
specParts := strings.Split(spec, ":")
|
||||||
|
if len(specParts) != 2 {
|
||||||
|
return nil, fmt.Errorf("Invalid port format.")
|
||||||
|
}
|
||||||
// If spec starts with ':', external and internal ports must be the same.
|
// If spec starts with ':', external and internal ports must be the same.
|
||||||
// This might fail if the requested external port is not available.
|
// This might fail if the requested external port is not available.
|
||||||
var sameFrontend bool
|
var sameFrontend bool
|
||||||
if spec[0] == ':' {
|
if len(specParts[0]) == 0 {
|
||||||
sameFrontend = true
|
sameFrontend = true
|
||||||
spec = spec[1:]
|
} else {
|
||||||
|
front, err := strconv.ParseUint(specParts[0], 10, 16)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
nat.Frontend = int(front)
|
||||||
|
}
|
||||||
|
back, err := strconv.ParseUint(specParts[1], 10, 16)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
nat.Backend = int(back)
|
||||||
|
if sameFrontend {
|
||||||
|
nat.Frontend = nat.Backend
|
||||||
|
}
|
||||||
|
} else {
|
||||||
port, err := strconv.ParseUint(spec, 10, 16)
|
port, err := strconv.ParseUint(spec, 10, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
nat.Backend = int(port)
|
nat.Backend = int(port)
|
||||||
if sameFrontend {
|
|
||||||
nat.Frontend = nat.Backend
|
|
||||||
}
|
}
|
||||||
nat.Proto = "tcp"
|
nat.Proto = "tcp"
|
||||||
return &nat, nil
|
return &nat, nil
|
||||||
|
|
Loading…
Reference in New Issue