diff --git a/daemon/containerd/image_import.go b/daemon/containerd/image_import.go index 7738b6e203..ff9242472d 100644 --- a/daemon/containerd/image_import.go +++ b/daemon/containerd/image_import.go @@ -393,8 +393,11 @@ func containerConfigToOciImageConfig(cfg *container.Config) ocispec.ImageConfig StopSignal: cfg.StopSignal, ArgsEscaped: cfg.ArgsEscaped, } - for k, v := range cfg.ExposedPorts { - ociCfg.ExposedPorts[string(k)] = v + if len(cfg.ExposedPorts) > 0 { + ociCfg.ExposedPorts = map[string]struct{}{} + for k, v := range cfg.ExposedPorts { + ociCfg.ExposedPorts[string(k)] = v + } } return ociCfg diff --git a/daemon/containerd/image_import_test.go b/daemon/containerd/image_import_test.go new file mode 100644 index 0000000000..1b2e20f371 --- /dev/null +++ b/daemon/containerd/image_import_test.go @@ -0,0 +1,22 @@ +package containerd + +import ( + "testing" + + "github.com/docker/docker/api/types/container" + "github.com/docker/go-connections/nat" + "gotest.tools/v3/assert" + is "gotest.tools/v3/assert/cmp" +) + +// regression test for https://github.com/moby/moby/issues/45904 +func TestContainerConfigToOciImageConfig(t *testing.T) { + ociCFG := containerConfigToOciImageConfig(&container.Config{ + ExposedPorts: nat.PortSet{ + "80/tcp": struct{}{}, + }, + }) + + expected := map[string]struct{}{"80/tcp": {}} + assert.Check(t, is.DeepEqual(ociCFG.ExposedPorts, expected)) +}