diff --git a/daemon/container_linux.go b/daemon/container_linux.go index 4d93a9fb6b..9df53a09be 100644 --- a/daemon/container_linux.go +++ b/daemon/container_linux.go @@ -513,13 +513,23 @@ func (container *Container) buildPortMapInfo(n libnetwork.Network, ep libnetwork networkSettings.MacAddress = mac.(net.HardwareAddr).String() } + networkSettings.Ports = nat.PortMap{} + + if expData, ok := driverInfo[netlabel.ExposedPorts]; ok { + if exposedPorts, ok := expData.([]types.TransportPort); ok { + for _, tp := range exposedPorts { + natPort := nat.NewPort(tp.Proto.String(), strconv.Itoa(int(tp.Port))) + networkSettings.Ports[natPort] = nil + } + } + } + mapData, ok := driverInfo[netlabel.PortMap] if !ok { return networkSettings, nil } if portMapping, ok := mapData.([]types.PortBinding); ok { - networkSettings.Ports = nat.PortMap{} for _, pp := range portMapping { natPort := nat.NewPort(pp.Proto.String(), strconv.Itoa(int(pp.Port))) natBndg := nat.PortBinding{HostIp: pp.HostIP.String(), HostPort: strconv.Itoa(int(pp.HostPort))} diff --git a/hack/vendor.sh b/hack/vendor.sh index 7a99c38b09..d093aea625 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -55,7 +55,7 @@ clone hg code.google.com/p/go.net 84a4013f96e0 clone hg code.google.com/p/gosqlite 74691fb6f837 #get libnetwork packages -clone git github.com/docker/libnetwork 005bc475ee49a36ef2ad9c112d1b5ccdaba277d4 +clone git github.com/docker/libnetwork f72ad20491e8c46d9664da3f32a0eddb301e7c8d clone git github.com/vishvananda/netns 008d17ae001344769b031375bdb38a86219154c6 clone git github.com/vishvananda/netlink 8eb64238879fed52fd51c5b30ad20b928fb4c36c diff --git a/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go b/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go index 09c7397b2d..05b1535dd0 100644 --- a/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go +++ b/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go @@ -686,6 +686,15 @@ func (d *driver) EndpointOperInfo(nid, eid types.UUID) (map[string]interface{}, m := make(map[string]interface{}) + if ep.config.ExposedPorts != nil { + // Return a copy of the config data + epc := make([]types.TransportPort, 0, len(ep.config.ExposedPorts)) + for _, tp := range ep.config.ExposedPorts { + epc = append(epc, tp.GetCopy()) + } + m[netlabel.ExposedPorts] = epc + } + if ep.portMapping != nil { // Return a copy of the operational data pmc := make([]types.PortBinding, 0, len(ep.portMapping))