Browse Source

Merge pull request #11168 from estesp/no-inotify-overlayfs

Don't test resolv.conf updater on overlay filesystem
Jessie Frazelle 10 years ago
parent
commit
7125ae00bb

+ 7 - 0
docs/sources/articles/networking.md

@@ -189,6 +189,13 @@ the `/etc/resolv.conf` of the host machine where the `docker` daemon is
 running.  You might wonder what happens when the host machine's
 `/etc/resolv.conf` file changes.  The `docker` daemon has a file change
 notifier active which will watch for changes to the host DNS configuration.
+
+> **Note**:
+> The file change notifier relies on the Linux kernel's inotify feature.
+> Because this feature is currently incompatible with the overlay filesystem 
+> driver, a Docker daemon using "overlay" will not be able to take advantage
+> of the `/etc/resolv.conf` auto-update feature.
+
 When the host file changes, all stopped containers which have a matching
 `resolv.conf` to the host will be updated immediately to this newest host
 configuration.  Containers which are running when the host configuration

+ 3 - 1
integration-cli/docker_cli_run_test.go

@@ -1589,7 +1589,9 @@ func TestRunDnsOptionsBasedOnHostResolvConf(t *testing.T) {
 // stopped and have an unmodified copy of resolv.conf, as well as
 // marking running containers as requiring an update on next restart
 func TestRunResolvconfUpdater(t *testing.T) {
-	testRequires(t, SameHostDaemon)
+	// Because overlay doesn't support inotify properly, we need to skip
+	// this test if the docker daemon has Storage Driver == overlay
+	testRequires(t, SameHostDaemon, NotOverlay)
 
 	tmpResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78")
 	tmpLocalhostResolvConf := []byte("nameserver 127.0.0.1")

+ 11 - 0
integration-cli/requirements.go

@@ -66,6 +66,17 @@ var (
 		},
 		"Test requires the native (libcontainer) exec driver.",
 	}
+
+	NotOverlay = TestRequirement{
+		func() bool {
+			cmd := exec.Command("grep", "^overlay / overlay", "/proc/mounts")
+			if err := cmd.Run(); err != nil {
+				return true
+			}
+			return false
+		},
+		"Test requires underlying root filesystem not be backed by overlay.",
+	}
 )
 
 // testRequires checks if the environment satisfies the requirements