Linux 安全:如何使用 --read-only 启动 Docker 容器

发布时间 - 2025-11-19 00:00:00    点击率:
启用 --read-only 模式可将容器根文件系统设为只读,防止运行时写入,提升安全性;需配合 --tmpfs 或 -v 挂载临时或持久化存储以支持必要写操作。

在运行 Docker 容器时,使用 --read-only 选项是一种简单而有效的安全加固手段。它能防止容器在运行过程中对文件系统进行写入操作,从而降低因应用漏洞或恶意行为导致的数据篡改或持久化攻击风险。

什么是 --read-only 模式?

启用 --read-only 后,Docker 会将容器的根文件系统挂载为只读。这意味着容器内的进程无法修改已有的文件、创建新文件或删除内容(除非显式挂载了可写目录)。

这个机制特别适合那些不需要持久写入本地磁盘的应用,比如静态 Web 服务、API 前端或数据处理工具。

如何启用 --read-only 模式

启动容器时,只需添加 --read-only 参数即可:

docker run -d --read-only nginx

这样启动的 Nginx 容器,其整个根目录(如 /usr、/bin、/etc 等)都不可写。

但要注意:很多应用需要写临时数据,例如日志、缓存或会话文件。因此通常还需配合可写挂载点使用。

允许必要的写入操作:使用临时文件系统

为了在只读容器中支持必要写入,可以通过 --tmpfs-v 挂载方式提供可写层:

  • --tmpfs /tmp:将内存中的 tmpfs 挂载到 /tmp,用于临时文件
  • --tmpfs /var/log:允许应用写日志
  • --tmpfs /var/run:常用于守护进程的运行时状态文件

完整示例:

docker run -d \ --read-only \ --tmpfs /tmp \ --tmpfs /var/log \ --tmpfs /var/run \ nginx

这种方式既保证了系统文件不被篡改,又满足了运行时需求。

结合 volume 实现持久化写入(按需)

如果需要持久化存储(如上传文件、数据库等),应通过 -v 显式挂载宿主机目录或命名卷:

docker run -d \ --read-only \ -v /host/uploads:/app/uploads \ my-web-app

只有 /app/uploads 可写,其余路径仍受保护。

这种最小权限原则能有效限制潜在攻击面。

基本上就这些。使用 --read-only 是提升容器安全性的低成本高收益实践,配合 tmpfs 和 volume 控制写入位置,既能保障安全性,又不影响功能。


# linux  # 前端  # docker  # nginx  # app  # 工具  # 持久化存储  # var  # 数据库  # 文件系统  # 是一种  # 不需要  # 只需  # 设为  # 可以通过  # 数据处理  # 或删除  # 又不  # 不被 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速使用云服务器搭建个人网站?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  微信小程序 闭包写法详细介绍  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  微信h5制作网站有哪些,免费微信H5页面制作工具?  Python结构化数据采集_字段抽取解析【教程】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Android使用GridView实现日历的简单功能  网站制作企业,网站的banner和导航栏是指什么?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  如何用景安虚拟主机手机版绑定域名建站?  韩国服务器如何优化跨境访问实现高效连接?  如何基于云服务器快速搭建个人网站?  js实现获取鼠标当前的位置  微信小程序 input输入框控件详解及实例(多种示例)  如何实现建站之星域名转发设置?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  linux写shell需要注意的问题(必看)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Laravel如何实现一对一模型关联?(Eloquent示例)  深入理解Android中的xmlns:tools属性  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  桂林网站制作公司有哪些,桂林马拉松怎么报名?  jQuery 常见小例汇总  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel如何使用Vite进行前端资源打包?(配置示例)  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何处理表单验证?(Requests代码示例)  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何挑选最适合建站的高性能VPS主机?  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  如何为不同团队 ID 动态生成多个非值班状态按钮  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  详解CentOS6.5 安装 MySQL5.1.71的方法  LinuxCD持续部署教程_自动发布与回滚机制  Laravel如何自定义错误页面(404, 500)?(代码示例)  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  JavaScript实现Fly Bird小游戏  如何在云主机上快速搭建多站点网站?