|
@@ -10,6 +10,7 @@ import (
|
|
|
containertypes "github.com/docker/docker/api/types/container"
|
|
|
"github.com/docker/docker/api/types/versions"
|
|
|
"github.com/docker/docker/integration/internal/container"
|
|
|
+ net "github.com/docker/docker/integration/internal/network"
|
|
|
"gotest.tools/assert"
|
|
|
is "gotest.tools/assert/cmp"
|
|
|
"gotest.tools/poll"
|
|
@@ -93,3 +94,37 @@ func TestNISDomainname(t *testing.T) {
|
|
|
assert.Equal(t, 0, res.ExitCode)
|
|
|
assert.Check(t, is.Equal(domainname, strings.TrimSpace(res.Stdout())))
|
|
|
}
|
|
|
+
|
|
|
+func TestHostnameDnsResolution(t *testing.T) {
|
|
|
+ skip.If(t, testEnv.DaemonInfo.OSType != "linux")
|
|
|
+
|
|
|
+ defer setupTest(t)()
|
|
|
+ client := testEnv.APIClient()
|
|
|
+ ctx := context.Background()
|
|
|
+
|
|
|
+ const (
|
|
|
+ hostname = "foobar"
|
|
|
+ )
|
|
|
+
|
|
|
+ // using user defined network as we want to use internal DNS
|
|
|
+ netName := "foobar-net"
|
|
|
+ net.CreateNoError(t, context.Background(), client, netName, net.WithDriver("bridge"))
|
|
|
+
|
|
|
+ cID := container.Run(t, ctx, client, func(c *container.TestContainerConfig) {
|
|
|
+ c.Config.Hostname = hostname
|
|
|
+ c.HostConfig.NetworkMode = containertypes.NetworkMode(netName)
|
|
|
+ })
|
|
|
+
|
|
|
+ poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
|
|
+
|
|
|
+ inspect, err := client.ContainerInspect(ctx, cID)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Check(t, is.Equal(hostname, inspect.Config.Hostname))
|
|
|
+
|
|
|
+ // Clear hosts file so ping will use DNS for hostname resolution
|
|
|
+ res, err := container.Exec(ctx, client, cID,
|
|
|
+ []string{"sh", "-c", "echo 127.0.0.1 localhost | tee /etc/hosts && ping -c 1 foobar"})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Check(t, is.Equal("", res.Stderr()))
|
|
|
+ assert.Equal(t, 0, res.ExitCode)
|
|
|
+}
|