Fix network connectivity problem for non-root users
If a container was started with a non-root user the container may not be able to resolve DNS names because of too restrictive permission in the /etc/resolv.conf container file. This problem is in how this file gets created in libnetwork and ths PR attempts to fix the issue by vendoring in the libnetwork code with the fix. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com> Upstream-commit: afd901e408d8d4ed00707c545ae985bc637a1979 Component: engine
This commit is contained in:
@@ -1455,6 +1455,32 @@ func (s *DockerSuite) TestRunDnsOptionsBasedOnHostResolvConf(c *check.C) {
|
||||
}
|
||||
}
|
||||
|
||||
// Test to see if a non-root user can resolve a DNS name and reach out to it. Also
|
||||
// check if the container resolv.conf file has atleast 0644 perm.
|
||||
func (s *DockerSuite) TestRunNonRootUserResolvName(c *check.C) {
|
||||
testRequires(c, SameHostDaemon)
|
||||
|
||||
cmd := exec.Command(dockerBinary, "run", "--name=testperm", "--user=default", "busybox", "ping", "-c", "1", "www.docker.io")
|
||||
if out, err := runCommand(cmd); err != nil {
|
||||
c.Fatal(err, out)
|
||||
}
|
||||
|
||||
cID, err := getIDByName("testperm")
|
||||
if err != nil {
|
||||
c.Fatal(err)
|
||||
}
|
||||
|
||||
fmode := (os.FileMode)(0644)
|
||||
finfo, err := os.Stat(containerStorageFile(cID, "resolv.conf"))
|
||||
if err != nil {
|
||||
c.Fatal(err)
|
||||
}
|
||||
|
||||
if (finfo.Mode() & fmode) != fmode {
|
||||
c.Fatalf("Expected container resolv.conf mode to be atleast %s, instead got %s", fmode.String(), finfo.Mode().String())
|
||||
}
|
||||
}
|
||||
|
||||
// Test if container resolv.conf gets updated the next time it restarts
|
||||
// if host /etc/resolv.conf has changed. This only applies if the container
|
||||
// uses the host's /etc/resolv.conf and does not have any dns options provided.
|
||||
|
||||
Reference in New Issue
Block a user