github.com/tonistiigi/docker@v0.10.1-0.20240229224939-974013b0dc6a/integration/networking/resolvconf_test.go (about) 1 package networking 2 3 import ( 4 "os" 5 "strings" 6 "testing" 7 8 containertypes "github.com/docker/docker/api/types/container" 9 "github.com/docker/docker/integration/internal/container" 10 "github.com/docker/docker/integration/internal/network" 11 "github.com/docker/docker/testutil/daemon" 12 "gotest.tools/v3/assert" 13 is "gotest.tools/v3/assert/cmp" 14 "gotest.tools/v3/skip" 15 ) 16 17 // Regression test for https://github.com/moby/moby/issues/46968 18 func TestResolvConfLocalhostIPv6(t *testing.T) { 19 // No "/etc/resolv.conf" on Windows. 20 skip.If(t, testEnv.DaemonInfo.OSType == "windows") 21 22 ctx := setupTest(t) 23 24 // Write a resolv.conf that only contains a loopback address. 25 // Not using t.TempDir() here because in rootless mode, while the temporary 26 // directory gets mode 0777, it's a subdir of an 0700 directory owned by root. 27 // So, it's not accessible by the daemon. 28 f, err := os.CreateTemp("", "resolv.conf") 29 assert.NilError(t, err) 30 defer os.Remove(f.Name()) 31 err = f.Chmod(0644) 32 assert.NilError(t, err) 33 f.Write([]byte("nameserver 127.0.0.53\n")) 34 35 d := daemon.New(t, daemon.WithEnvVars("DOCKER_TEST_RESOLV_CONF_PATH="+f.Name())) 36 d.StartWithBusybox(ctx, t, "--experimental", "--ip6tables") 37 defer d.Stop(t) 38 39 c := d.NewClientT(t) 40 defer c.Close() 41 42 netName := "nnn" 43 network.CreateNoError(ctx, t, c, netName, 44 network.WithDriver("bridge"), 45 network.WithIPv6(), 46 network.WithIPAM("fd49:b5ef:36d9::/64", "fd49:b5ef:36d9::1"), 47 ) 48 defer network.RemoveNoError(ctx, t, c, netName) 49 50 result := container.RunAttach(ctx, t, c, 51 container.WithImage("busybox:latest"), 52 container.WithNetworkMode(netName), 53 container.WithCmd("cat", "/etc/resolv.conf"), 54 ) 55 defer c.ContainerRemove(ctx, result.ContainerID, containertypes.RemoveOptions{ 56 Force: true, 57 }) 58 59 output := strings.ReplaceAll(result.Stdout.String(), f.Name(), "RESOLV.CONF") 60 assert.Check(t, is.Equal(output, `# Generated by Docker Engine. 61 # This file can be edited; Docker Engine will not make further changes once it 62 # has been modified. 63 64 nameserver 127.0.0.11 65 options ndots:0 66 67 # Based on host file: 'RESOLV.CONF' (internal resolver) 68 # ExtServers: [host(127.0.0.53)] 69 # Overrides: [] 70 # Option ndots from: internal 71 `)) 72 }