Skip to content

Commit 4ff8942

Browse files
authored
Merge pull request moby#51621 from robmry/fix-crash-with-nil-portbindings
PublishAllPorts: don't crash with nil PortBindings
2 parents 3964729 + 7517464 commit 4ff8942

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

daemon/internal/runconfig/config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ func decodeCreateRequest(src io.Reader) (container.CreateRequest, error) {
4242
if w.HostConfig == nil {
4343
w.HostConfig = &container.HostConfig{}
4444
}
45+
if w.HostConfig.PortBindings == nil {
46+
w.HostConfig.PortBindings = make(network.PortMap)
47+
}
4548
// Make sure NetworkMode has an acceptable value. We do this to ensure
4649
// backwards compatible API behavior.
4750
//

integration/internal/container/ops.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ func WithSysctls(sysctls map[string]string) func(*TestContainerConfig) {
7272
}
7373
}
7474

75+
// WithPublishAllPorts sets PublishAllPorts.
76+
func WithPublishAllPorts(publishAll bool) func(*TestContainerConfig) {
77+
return func(c *TestContainerConfig) {
78+
c.HostConfig.PublishAllPorts = publishAll
79+
}
80+
}
81+
7582
// WithExposedPorts sets the exposed ports of the container
7683
func WithExposedPorts(ports ...string) func(*TestContainerConfig) {
7784
return func(c *TestContainerConfig) {

integration/networking/bridge_linux_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ import (
2222
"github.com/moby/moby/v2/daemon/libnetwork/drivers/bridge"
2323
"github.com/moby/moby/v2/daemon/libnetwork/iptables"
2424
"github.com/moby/moby/v2/daemon/libnetwork/netlabel"
25+
"github.com/moby/moby/v2/integration/internal/build"
2526
"github.com/moby/moby/v2/integration/internal/container"
2627
"github.com/moby/moby/v2/integration/internal/network"
2728
"github.com/moby/moby/v2/integration/internal/testutils/networking"
2829
n "github.com/moby/moby/v2/integration/network"
2930
"github.com/moby/moby/v2/internal/testutil"
3031
"github.com/moby/moby/v2/internal/testutil/daemon"
32+
"github.com/moby/moby/v2/internal/testutil/fakecontext"
3133
"gotest.tools/v3/assert"
3234
is "gotest.tools/v3/assert/cmp"
3335
"gotest.tools/v3/icmd"
@@ -2139,3 +2141,18 @@ func TestGatewayErrorOnNetDisconnect(t *testing.T) {
21392141
assert.Check(t, is.Contains(ctrInsp.NetworkSettings.Networks, "n1"))
21402142
assert.Check(t, is.Contains(ctrInsp.NetworkSettings.Networks, "n2"))
21412143
}
2144+
2145+
// Regression test for https://github.com/moby/moby/issues/51620
2146+
func TestPublishAllWithNilPortBindings(t *testing.T) {
2147+
ctx := setupTest(t)
2148+
c := testEnv.APIClient()
2149+
2150+
imgWithExpose := container.WithImage(build.Do(ctx, t, c,
2151+
fakecontext.New(t, "", fakecontext.WithDockerfile("FROM busybox\nEXPOSE 80/tcp\n"))))
2152+
2153+
_ = container.Run(ctx, t, c,
2154+
container.WithAutoRemove,
2155+
container.WithPublishAllPorts(true),
2156+
imgWithExpose,
2157+
)
2158+
}

0 commit comments

Comments
 (0)