卷(volumes) 和 綁定掛載(bind mounts) 允許您在主機和容器之間共享文件,這樣即使在容器停止后也可以持久存儲數據。
如果在 Linux 上運行 Docker,那么還有第三種選擇:tmpfs 掛載。當您創建帶有 tmpfs 掛載的容器時,容器可以在容器的可寫層之外創建文件。
與卷和綁定掛載不同,tmpfs 掛載是臨時的,只存留在主機內存中。當容器停止時,tmpfs 掛載將被刪除,在那里寫入的文件不會被持久化。

這對於臨時存儲您不想在主機或容器可寫層中持久存儲的敏感文件非常有用。
tmpfs 掛載的局限性
- 不同於卷和綁定掛載,不能在容器之間共享
tmpfs掛載。 - 這個功能只有在 Linux 上運行 Docker 時才可用。
選擇 --tmpfs 或 --mount 標記
最初,--tmpfs 標記用於獨立容器,--mount 標記用於集群服務。但是從 Docker 17.06 開始,您還可以將 --mount 與獨立容器一起使用。通常,--mount 標記表達更加明確和冗長。最大的區別是,--tmpfs 標記不支持任何可配置的選項。
--tmpfs: 設置tmpfs掛載不允許您指定任何可配置選項,並且只能與獨立容器一起使用。--mount:由多個鍵-值對組成,,每個鍵-值對由一個<key>=<value>元組組成。--mount語法比--tmpfs更冗長:- 掛載的類型(
type),可以是bind、volume或者tmpfs。本主題討論tmpfs,因此類型(type)始終為tmpfs。 - 目標(
destination),將容器中tmpfs掛載設置的路徑作為其值。可以用destination、dst或者target來指定。 tmpfs-size和tmpfs-mode選項。請查看下文的 指定 tmpfs 選項。
- 掛載的類型(
下面的示例盡可能同時展示 --mount 和 --tmpfs 兩種語法,並且先展示 --mount。
--tmpfs 和 --mount 行為之間的差異
--tmpfs標記不允許指定任何可配置選項。--tmpfs標記不能用於集群服務。對於集群服務,您必須使用--mount。
在容器中使用 tmpfs 掛載
要在容器中使用 tmpfs 掛載, 請使用 --tmpfs 標記, 或者使用帶有 type=tmpfs 和 destination 選項的 --mount 標記。沒有用於 tmpfs 掛載的源(source)。
下面的示例在 Nginx 容器中的 /app 創建一個 tmpfs 掛載。第一個例子使用 --mount 標記,第二個使用 --tmpfs 標記。
--mount:
$ docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app \
nginx:latest
--tmpfs:
$ docker run -d \
-it \
--name tmptest \
--tmpfs /app \
nginx:latest
通過運行 docker container inspect tmptest 來驗證掛載是否是 tmpfs 掛載,查看 Mounts 部分:
"Tmpfs": {
"/app": ""
},
刪除容器:
$ docker container stop tmptest
$ docker container rm tmptest
指定 tmpfs 選項
tmpfs 掛載允許兩個配置選項,兩個選項都不是必需的。 如果需要指定這些選項,則必須使用 --mount 標記,因為 --tmpfs 標記不支持。
| 選項 | 描述 |
|---|---|
tmpfs-size |
tmpfs 掛載的大小(以字節為單位)。默認無限制。 |
tmpfs-mode |
tmpfs 的八進制文件模式。例如,700 或 0770。默認為 1777 或全局可寫。 |
下面的示例將 tmpfs-mode 設置為 1770,因此在容器中它不是全局可讀的。
docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
nginx:latest
