diff --git a/daemon/inspect.go b/daemon/inspect.go index 1c9285fd97..915b9d810b 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -8,6 +8,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" + containertypes "github.com/docker/docker/api/types/container" networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/versions" "github.com/docker/docker/api/types/versions/v1p20" @@ -36,8 +37,10 @@ func (daemon *Daemon) ContainerInspect(ctx context.Context, name string, size bo } shortCID := stringid.TruncateID(ctr.ID) - for _, ep := range ctr.NetworkSettings.Networks { - ep.Aliases = sliceutil.Dedup(append(ep.Aliases, shortCID, ctr.Config.Hostname)) + for nwName, ep := range ctr.NetworkSettings.Networks { + if containertypes.NetworkMode(nwName).IsUserDefined() { + ep.Aliases = sliceutil.Dedup(append(ep.Aliases, shortCID, ctr.Config.Hostname)) + } } return ctr, nil diff --git a/integration/container/inspect_test.go b/integration/container/inspect_test.go index 4df2d17aa4..39f7eeab78 100644 --- a/integration/container/inspect_test.go +++ b/integration/container/inspect_test.go @@ -2,10 +2,12 @@ package container // import "github.com/docker/docker/integration/container" import ( "encoding/json" + "runtime" "strings" "testing" "time" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/docker/docker/integration/internal/container" "github.com/docker/docker/testutil/request" @@ -68,3 +70,33 @@ func TestInspectAnnotations(t *testing.T) { assert.NilError(t, err) assert.Check(t, is.DeepEqual(inspect.HostConfig.Annotations, annotations)) } + +// TestNetworkAliasesAreEmpty verifies that network-scoped aliases are not set +// for non-custom networks (network-scoped aliases are only supported for +// custom networks, except for the "Default Switch" network on Windows). +func TestNetworkAliasesAreEmpty(t *testing.T) { + ctx := setupTest(t) + apiClient := request.NewAPIClient(t) + + netModes := []string{"host", "bridge", "none"} + if runtime.GOOS == "windows" { + netModes = []string{"nat", "none"} + } + + for _, nwMode := range netModes { + t.Run(nwMode, func(t *testing.T) { + ctr := container.Create(ctx, t, apiClient, + container.WithName("ctr-"+nwMode), + container.WithImage("busybox:latest"), + container.WithNetworkMode(nwMode)) + defer apiClient.ContainerRemove(ctx, ctr, containertypes.RemoveOptions{ + Force: true, + }) + + inspect := container.Inspect(ctx, t, apiClient, ctr) + netAliases := inspect.NetworkSettings.Networks[nwMode].Aliases + + assert.Check(t, is.Nil(netAliases)) + }) + } +}