一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何用 --read-only 参数将容器根文件系统设为只读

时间:2026-07-10 09:46:52 编辑:袖梨 来源:一聚教程网

--read-only 参数使 Docker 容器根文件系统只读以增强安全,需配合 --tmpfs 挂载临时路径(如 /tmp、/var/log)满足写入需求,挂载卷应显式声明 ro/rw,验证可通过 touch 测试或 mount 命令查看 ro 标志。

使用 --read-only 参数可让 docker 容器的根文件系统(/)变为只读,防止运行时意外或恶意写入,提升安全性与稳定性。

基本用法:启动时启用只读根文件系统

只需在 docker run 命令中添加 --read-only 即可:

  • docker run --read-only nginx —— 整个根文件系统不可写
  • 该参数不影响容器内其他挂载点(如通过 -v--tmpfs 挂载的目录),它们仍可按自身配置读写
  • 注意:若应用需在 /tmp/var/log 等默认路径写入,会因只读失败,需额外处理

配合临时文件系统解决写入需求

多数应用需要临时写入(如日志、缓存、PID 文件),可通过 --tmpfs 显式挂载可写内存文件系统:

  • docker run --read-only --tmpfs /tmp --tmpfs /var/log nginx
  • --tmpfs /run:rw,size=10M,mode=0755 可指定大小和权限
  • /dev/proc/sys 等伪文件系统不受 --read-only 影响,保持原有行为

注意挂载卷的读写控制

--read-only 不改变外部卷的读写属性,但建议显式声明以明确意图:

  • -v /host/data:/app/data:ro —— 挂载为只读
  • -v /host/logs:/var/log:rw —— 若需写日志,挂载为可写,并确保目标路径不在只读根下
  • 避免将卷挂载到根文件系统内已被设为只读的路径(如 /etc),否则可能被拒绝或覆盖失败

验证是否生效

进入容器后尝试写入根目录下的文件即可确认:

  • docker exec -it <container> sh
  • touch /test.txt → 应报错 Read-only file system
  • touch /tmp/test.txt → 应成功(前提是挂载了 --tmpfs /tmp
  • 也可检查挂载信息:mount | grep " / " ,输出中应含 ro, 标志

热门栏目