Docker只读文件系统

2026-07-15 34
Docker

类型:虚拟化技术

简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。

容器运行后,如果应用不需要修改系统目录,就可以考虑把容器文件系统设置为只读。这样即使应用出现异常,也能减少运行时写入范围。只读文件系统不是所有应用都能直接开启,需要提前规划日志、缓存、临时文件和上传目录。

一、什么场景适合只读文件系统

适合:

  • 静态 Web 服务。
  • API 服务。
  • 无需本地持久写入的应用。
  • 配置固定的内部工具。
  • 安全要求较高的容器。

不适合直接开启:

  • 需要写本地数据库的容器。
  • 需要频繁生成本地文件的应用。
  • 未明确日志和缓存路径的旧应用。

二、Compose 中开启 read_only

示例:

services:
  app:
    image: example-app
    read_only: true

开启后,容器默认文件系统不可写。应用如果尝试写入 /tmp、日志目录或缓存目录,可能会报错。

三、用 tmpfs 提供临时写入空间

很多应用需要写 /tmp。可以使用 tmpfs:

services:
  app:
    image: example-app
    read_only: true
    tmpfs:
      - /tmp

tmpfs 位于内存中,适合临时文件,不适合保存重要数据。容器重启后内容会丢失。

四、持久目录要单独挂载

如果应用需要保存上传文件或业务数据,应显式挂载:

services:
  app:
    image: example-app
    read_only: true
    volumes:
      - ./uploads:/app/uploads
    tmpfs:
      - /tmp

这样系统目录只读,业务写入目录可控。

五、排查写入失败

常见报错包括:

Read-only file system
Permission denied
No such file or directory

排查步骤:

  1. 查看应用需要写入哪些路径。
  2. 判断是临时文件还是持久文件。
  3. 临时文件使用 tmpfs。
  4. 持久文件使用 volume。
  5. 检查目录权限和运行用户。

FAQ

问:Docker 只读文件系统会影响日志吗?

可能影响写文件日志。建议应用输出到标准输出,或单独挂载日志目录。

问:tmpfs 适合保存上传文件吗?

不适合。tmpfs 是临时内存文件系统,容器重启后会丢失。

问:所有容器都建议 read_only 吗?

不是。要先确认应用写入路径,避免影响正常运行。

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。