Jie Yu created MESOS-9462:
-----------------------------

             Summary: Devices in a container are inaccessible due to `nodev` on 
`/var/run`.
                 Key: MESOS-9462
                 URL: https://issues.apache.org/jira/browse/MESOS-9462
             Project: Mesos
          Issue Type: Bug
    Affects Versions: 1.8.0
            Reporter: Jie Yu


A recent [patch|https://reviews.apache.org/r/69086/] (commit 
ede8155d1d043137e15007c48da36ac5fa0b5124) changes the behavior of how standard 
device nodes (e.g., /dev/null, etc.) are setup. It uses bind mount (from host) 
now (instead of mknod).

The devices nodes are created under 
`/var/run/mesos/containers/<container_id>/devices`, and then bind mounted to 
the container root filesystem. This is problematic for those Linux distros that 
mount `/var/run` (or `/run`) as `nodev`. For instance, CentOS 7.4:
{noformat}
[jie@core-dev ~]$ cat /proc/self/mountinfo | grep "/run\ "                      
                                                                                
                   
24 62 0:19 / /run rw,nosuid,nodev shared:23 - tmpfs tmpfs rw,seclabel,mode=755
[jie@core-dev ~]$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
{noformat}

As a result, the `/dev/null` devices in the container will inherit the `nodev` 
from `/run` on the host
{noformat}
629 625 0:121 
/mesos/containers/49f1da14-d741-4030-994c-0d8ed5093b13/devices/null /dev/null 
rw,nosuid,nodev - tmpfs tmpfs rw,mode=755
{noformat}

This will cause "Permission Denied" error when a process in the container tries 
to open the device node.

You can try to reproduce this issue using Mesos Mini
{noformat}
docker run --rm --privileged -p 5050:5050 -p 5051:5051 -p 8080:8080 
mesos/mesos-mini:master-2018-12-06
{noformat}

And the, go to Marathon UI (http://localhost:8080), and launch an app using the 
following config
{code}
{
  "id": "/test",
  "cmd": "dd if=/dev/zero of=file bs=1024 count=1 oflag=dsync",
  "cpus": 1,
  "mem": 128,
  "disk": 128,
  "instances": 1,
  "container": {
    "type": "MESOS",
    "docker": {
      "image": "ubuntu:18.04"
    }
  }
}
{code}

You'll see the task failed with "Permission Denied".



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to