summaryrefslogtreecommitdiffhomepage
path: root/content/docs/user_guide/filesystem.md
blob: e0a0380073b4f54b309fd630a30b06e8a4d20be9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
+++
title = "Filesystem"
weight = 45
+++
gVisor accesses the filesystem through a file proxy, called the Gofer. The gofer
runs as a separate process, that is isolated from the sandbox. Gofer instances
communicate with their respective sentry using the 9P protocol. For a more detailed
explanation see [Overview > Gofer](../../architecture_guide/overview/#gofer).

## Sandbox overlay

To isolate the host filesystem from the sandbox, you can set a writable tmpfs overlay
on top of the entire filesystem. All modifications are made to the overlay, keeping
the host filesystem unmodified.

> Note: All created and modified files are stored in memory inside the sandbox.

To use the tmpfs overlay, add the following `runtimeArgs` to your Docker configuration
(`/etc/docker/daemon.json`) and restart the Docker daemon:

```json
{
    "runtimes": {
        "runsc": {
            "path": "/usr/local/bin/runsc",
            "runtimeArgs": [
                "--overlay"
            ]
       }
    }
}
```

## Shared root filesystem

The root filesystem is where the image is extracted and is not generally modified
from outside the sandbox. This allows for some optimizations, like skipping checks
to determine if a directory has changed since the last time it was cached, thus
missing updates that may have happened. If you need to `docker cp` files inside the
root filesystem, you may want to enable shared mode. Just be aware that file system
access will be slower due to the extra checks that are required.

> Note: External mounts are always shared.

To use set the root filesystem shared, add the following `runtimeArgs` to your Docker
configuration (`/etc/docker/daemon.json`) and restart the Docker daemon:

```json
{
    "runtimes": {
        "runsc": {
            "path": "/usr/local/bin/runsc",
            "runtimeArgs": [
                "--file-access=shared"
            ]
       }
    }
}
```