diff --git a/daemon/libnetwork/sandbox.go b/daemon/libnetwork/sandbox.go index 4d0236f2e4..8f5e531188 100644 --- a/daemon/libnetwork/sandbox.go +++ b/daemon/libnetwork/sandbox.go @@ -348,10 +348,8 @@ func (sb *Sandbox) populateNetworkResources(ctx context.Context, ep *Endpoint) ( // Populate DNS records. n := ep.getNetwork() - if !n.getController().isAgent() { - if !n.getController().isSwarmNode() || n.Scope() != scope.Swarm || !n.driverIsMultihost() { - n.updateSvcRecord(context.WithoutCancel(ctx), ep, true) - } + if !n.getController().isSwarmNode() || n.Scope() != scope.Swarm || !n.driverIsMultihost() { + n.updateSvcRecord(context.WithoutCancel(ctx), ep, true) } if err := ep.addDriverInfoToCluster(); err != nil { diff --git a/integration/networking/bridge_linux_test.go b/integration/networking/bridge_linux_test.go index 4fd27e74f2..705da61d4b 100644 --- a/integration/networking/bridge_linux_test.go +++ b/integration/networking/bridge_linux_test.go @@ -1092,7 +1092,7 @@ func TestDisableIPv6OnInterface(t *testing.T) { // There should not be an IPv6 DNS or /etc/hosts entry. runRes := container.RunAttach(ctx, t, c, container.WithNetworkMode(tc.netName), - container.WithCmd("ping", "-6", ctrName), + container.WithCmd("ping", "-6", "-c1", ctrName), ) assert.Check(t, is.Equal(runRes.ExitCode, 1)) assert.Check(t, is.Contains(runRes.Stderr.String(), "bad address")) @@ -2032,3 +2032,29 @@ func TestLegacyLinksEnvVars(t *testing.T) { }) } } + +// TestDNSNamesForNonSwarmScopedNetworks checks that container names can be resolved for non-swarm-scoped networks once +// a node has joined a Swarm cluster. +// +// Regression test for https://github.com/moby/moby/issues/51491. +func TestDNSNamesForNonSwarmScopedNetworks(t *testing.T) { + ctx := setupTest(t) + + d := daemon.New(t) + d.StartAndSwarmInit(ctx, t) + defer d.Stop(t) + + c := d.NewClientT(t) + defer c.Close() + + const bridgeName = "dnsnames-with-swarm" + network.CreateNoError(ctx, t, c, bridgeName) + defer network.RemoveNoError(ctx, t, c, bridgeName) + + res := container.RunAttach(ctx, t, c, + container.WithName("test"), + container.WithCmd("nslookup", "-type=a", "test."), + container.WithNetworkMode(bridgeName), + container.WithAutoRemove) + assert.Equal(t, res.ExitCode, 0, "exit code: %d, expected 0; stdout:\n%s", res.ExitCode, res.Stdout) +}