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

Docker部署Node.js/Fastify项目创建CSV文件遇EROFS错误求助

解决Docker部署Node.js/Fastify时创建CSV的EROFS只读错误

问题根源

Docker容器的默认文件系统大部分是只读的(尤其是官方Node镜像的基础层),你直接往容器内部的reports目录写入文件,触发了只读权限限制。

可行解决方案

1. 写入容器默认可写目录

容器内的/tmp目录是默认可写的,修改代码路径到该目录下:

const fs = require('fs');
// 先确保目标目录存在,recursive参数自动创建多级目录
fs.mkdirSync("/tmp/reports", { recursive: true });
// 创建文件写入流
const ws = fs.createWriteStream("/tmp/reports/test.csv");

2. 挂载宿主机目录作为卷(推荐用于持久化数据)

启动容器时,把宿主机的一个目录挂载到容器内的reports目录,这样容器内的该目录就具备读写权限:

docker run -v /宿主机本地绝对路径/reports:/app/reports your-fastify-image-name

说明:假设你的Fastify项目在容器内的工作目录是/app,代码里的reports/test.csv路径会对应到宿主机的/宿主机本地绝对路径/reports/test.csv,文件会持久化在宿主机上。

3. 在Dockerfile中创建可写目录并配置权限

如果不需要宿主机挂载,可在构建镜像时创建目录并设置正确权限:

WORKDIR /app
# 创建reports目录并将权限赋予node用户(官方Node镜像默认的非root用户)
RUN mkdir -p reports && chown -R node:node reports
# 以node用户运行容器,避免权限冲突
USER node

这样容器启动后,/app/reports目录就是可写的,代码路径无需修改。

额外提醒

  • 避免直接写入容器的系统目录(如/root、/usr等),这些目录几乎都是只读的。
  • 检查是否用了--read-only参数启动容器,如果是,必须通过卷挂载来提供可写路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:12:40