# tmpfs mounts

卷和bind mounts让我们可以在主机和容器之间共享文件并且可以在容器停止以后持久化数据。

如果我们在Linux主机上运行Docker，那么我们有第三个选项：tmpfs挂载。当我们使用tmpfs挂载创建一个容器，容器可以在容器的可写层外部创建文件。

与卷和bind mounts相反，tmpfs挂载是临时的，它只将文件持临时保存在主机内存中。当容器停止时，tmpfs挂载会被移除，写入的文件不会持久化保存。

![](https://3635233293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVjOb1Mk_y7lcQcI_LJ%2F-MWZZ15zfn9t7z0FXOAq%2F-MWZ_F84o_CAyu6YYdss%2F%E6%88%AA%E5%B1%8F2021-03-24%20%E4%B8%8B%E5%8D%8810.13.07.png?alt=media\&token=ec6b3b4f-a993-43b6-b89d-34b57f062d83)

这对于临时性存储的文件非常有用，我们既不需要持久化保存它们，也不需要在容器的可写层保存它们。

### tmpfs挂载的限制

* 不像卷和bind mounts那样，我们无法在容器之间共享tmpfs挂载。
* 这个功能只能在Linux系统主机上使用。

### 选择--tmpfs还是--mount

通常--mount更加的详细和明确。它们之间最大的不同是，tmpfs不支持指定的多多可配置的选项。

* \--tmpfs：挂载一个tmpfs挂载不允许你指定任何可配置的选项，并且只能配合单独的容器使用。
* \--mount：由多个键值对组成，通过逗号分隔并且以\<key>=\<value>形式指定内容。
  * 挂载的类型可以是bind, volume或tmpfs。
  * destination的值是容器中需要被挂载到tmfps上的路径。可以通过destination，dst或target来指定。
  * 可以使用tmpfs-size和tmpfs-mode选项。

### --tmpfs和--mount行为的不同

* \--tmpfs不允许指定任何可配置的选项。
* \--tmpfs无法用于swarm服务。必须使用--mount。

### 在一个容器中使用tmpfs挂载

为了使用tmpfs挂载，通过--tmpfs或者--mount来指定type=tmpfs以及destination选项。对于tmpfs挂载来说没有source。下面的示例在一个nginx容器的/app路径上创建了一个tmpfs挂载。第一个示例使用--mount，第二个示例使用--tmpfs。

{% tabs %}
{% tab title="--mount" %}

```
$ docker run -d \
  -it \
  --name tmptest \
  --mount type=tmpfs,destination=/app \
  nginx:latest
```

{% endtab %}

{% tab title="--tmpfs" %}

```
$ docker run -d \
  -it \
  --name tmptest \
  --tmpfs /app \
  nginx:latest
```

{% endtab %}
{% endtabs %}

通过docker inspect devtest来检查tmpfs挂载信息。查看Mounts部分：

```
"Tmpfs": {
    "/app": ""
},
```

移除容器：

```
$ docker container stop tmptest

$ docker container rm tmptest
```

### 指定tmpfs选项

tmpfs挂载允许两个配置选项，这两个选项都不是必须的。如果你需要指定这些选项，我们必须使用--mount，因为--tmpfs不支持它们。

| 选项         | 描述                                                 |
| ---------- | -------------------------------------------------- |
| tmpfs-size | 字节形式的tmpfs挂载大小。默认没有限制。                             |
| tmpfs-mode | 八进制形式的tmpfs文件模式。例如700或0700.默认为1777或world-writable。 |

以下示例设置tmpfs-mode为1770，以便在容器中它不是word-readable的。

```
docker run -d \
  -it \
  --name tmptest \
  --mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
  nginx:latest
```
