diff --git a/libnetwork/endpoint.go b/libnetwork/endpoint.go index b9933953a5..b32a047d1a 100644 --- a/libnetwork/endpoint.go +++ b/libnetwork/endpoint.go @@ -106,6 +106,51 @@ func (ep *endpoint) UnmarshalJSON(b []byte) (err error) { if v, ok := epMap["generic"]; ok { ep.generic = v.(map[string]interface{}) + + if opt, ok := ep.generic[netlabel.PortMap]; ok { + pblist := []types.PortBinding{} + + for i := 0; i < len(opt.([]interface{})); i++ { + pb := types.PortBinding{} + tmp := opt.([]interface{})[i].(map[string]interface{}) + + bytes, err := json.Marshal(tmp) + if err != nil { + log.Error(err) + break + } + err = json.Unmarshal(bytes, &pb) + if err != nil { + log.Error(err) + break + } + pblist = append(pblist, pb) + } + ep.generic[netlabel.PortMap] = pblist + } + + if opt, ok := ep.generic[netlabel.ExposedPorts]; ok { + tplist := []types.TransportPort{} + + for i := 0; i < len(opt.([]interface{})); i++ { + tp := types.TransportPort{} + tmp := opt.([]interface{})[i].(map[string]interface{}) + + bytes, err := json.Marshal(tmp) + if err != nil { + log.Error(err) + break + } + err = json.Unmarshal(bytes, &tp) + if err != nil { + log.Error(err) + break + } + tplist = append(tplist, tp) + } + ep.generic[netlabel.ExposedPorts] = tplist + + } } if v, ok := epMap["anonymous"]; ok {