diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index 20e8c6ee4c..53745eabf3 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -3186,3 +3186,14 @@ func (s *DockerSuite) TestRunUnshareProc(c *check.C) { c.Fatalf("unshare should have failed with permission denied, got: %s, %v", out, err) } } + +func (s *DockerSuite) TestRunPublishPort(c *check.C) { + out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "run", "-d", "--name", "test", "--expose", "8080", "busybox", "top")) + c.Assert(err, check.IsNil) + out, _, err = runCommandWithOutput(exec.Command(dockerBinary, "port", "test")) + c.Assert(err, check.IsNil) + out = strings.Trim(out, "\r\n") + if out != "" { + c.Fatalf("run without --publish-all should not publish port, out should be nil, but got: %s", out) + } +} diff --git a/nat/sort.go b/nat/sort.go index 6441936ff9..fa584c173b 100644 --- a/nat/sort.go +++ b/nat/sort.go @@ -60,10 +60,10 @@ func SortPortMap(ports []Port, bindings PortMap) { for _, b := range binding { s = append(s, portMapEntry{port: p, binding: b}) } + bindings[p] = []PortBinding{} } else { s = append(s, portMapEntry{port: p}) } - bindings[p] = []PortBinding{} } sort.Sort(s) @@ -79,7 +79,9 @@ func SortPortMap(ports []Port, bindings PortMap) { i++ } // reorder bindings for this port - bindings[entry.port] = append(bindings[entry.port], entry.binding) + if _, ok := bindings[entry.port]; ok { + bindings[entry.port] = append(bindings[entry.port], entry.binding) + } } }