You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker启动容器报错 OCI runtime create failed 只读文件系统

Docker挂载/app/node_modules提示只读文件系统的排查方案

根因说明

该报错发生在容器启动的runc挂载阶段,和用户是否加入docker组无关,本质是挂载目标路径的访问权限被限制为只读,常见诱因包括compose配置错误、磁盘分区挂载状态异常、Docker数据目录权限异常、残留卷损坏四类。

分步排查与修复

  • 第一步:检查compose文件的挂载参数
    打开项目下的docker-compose.yml和docker-compose.dev.yml,定位到backend服务的volumes配置段,找到/app/node_modules对应的挂载项。如果项末尾带有:ro后缀,就是显式配置了只读挂载,容器内进程无法向该路径写入数据,直接删除:ro即可(卷默认挂载模式为读写:rw,不需要额外标注参数)。

    错误配置示例:

    volumes:
      - ./backend-code:/app
      - backend_node_modules:/app/node_modules:ro
    

    修正后配置:

    volumes:
      - ./backend-code:/app
      - backend_node_modules:/app/node_modules
    
  • 第二步:检查项目所在分区的挂载状态
    全新Ubuntu如果开启了全盘加密、项目放在NTFS格式外接盘、或者系统异常触发磁盘保护,会自动把分区挂载为只读模式。在项目根目录打开终端执行:
    mount | grep "$(df -P . | awk 'NR==2{print $1}')"
    
    如果输出结果中包含ro标记,说明分区为只读状态,执行sudo mount -o remount,rw $(df -P . | awk 'NR==2{print $1}')将分区重新挂载为读写模式即可。如果项目存放在NTFS格式的外接存储上,需要先执行sudo apt install ntfs-3g安装NTFS读写驱动,再执行重挂载操作。
  • 第三步:检查Docker数据目录状态
    Docker默认的卷、镜像数据都存储在/var/lib/docker路径下,先执行findmnt /var/lib/docker查看该目录所在分区是否带ro只读标记,如果存在只读标记参考第二步的重挂载命令修复。再执行ls -ld /var/lib/docker确认目录权限为drwx--x---、属主属组为root,如果权限不对执行:
    sudo chown root:root /var/lib/docker
    sudo chmod 710 /var/lib/docker
    
    修复权限后重启Docker服务:sudo systemctl restart docker
  • 第四步:清理异常残留卷
    之前启动失败残留的损坏匿名卷也会触发挂载错误,在项目根目录执行docker compose down -v,删除当前项目关联的所有停止容器、网络和挂载卷(注意:该操作会清空项目关联卷内的所有数据,比如数据库测试数据,有需要提前备份),再重新执行原启动命令构建启动即可。

有效性验证

容器启动后执行docker compose exec backend sh进入backend容器命令行,在容器内执行touch /app/node_modules/testwrite,如果没有报错说明挂载权限正常,删除测试文件rm /app/node_modules/testwrite即可退出容器。

内容的提问来源于stack exchange,提问作者plutownium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:12:16