Docker容器运行Eleventy时出现间歇性EMFILE等错误求助
Docker容器中Eleventy间歇性文件类错误的已知根因分析
在Docker容器内运行npx eleventy时,源码未做任何修改却间歇性出现以下三类错误:
- EMFILE: too many open files
- ENOTDIR: not a directory
- ENOENT: no such file or directory
复现示例输出
$ while true ; do npx eleventy ; done [11ty] Wrote 95 files in 1.42 seconds (14.9ms each, v2.0.1) [11ty] Wrote 95 files in 1.71 seconds (18.0ms each, v2.0.1) [11ty] Wrote 95 files in 1.55 seconds (16.3ms each, v2.0.1) [11ty] Wrote 95 files in 2.01 seconds (21.2ms each, v2.0.1) [11ty] Wrote 95 files in 1.47 seconds (15.5ms each, v2.0.1) [11ty] Wrote 95 files in 1.45 seconds (15.3ms each, v2.0.1) [11ty] Wrote 95 files in 1.62 seconds (17.1ms each, v2.0.1) [11ty] Wrote 95 files in 1.73 seconds (18.2ms each, v2.0.1) [11ty] Wrote 95 files in 1.78 seconds (18.7ms each, v2.0.1) [11ty] Wrote 95 files in 1.52 seconds (16.0ms each, v2.0.1) [11ty] Problem writing Eleventy templates: (more in DEBUG output) [11ty] EMFILE: too many open files, stat './src/DIR/index.md' (via Error) [11ty] [11ty] Original error stack trace: Error: EMFILE: too many open files, stat './src/DIR/index.md' [11ty] Wrote 0 files in 1.53 seconds (v2.0.1) [11ty] Wrote 95 files in 1.56 seconds (16.4ms each, v2.0.1) [11ty] Wrote 95 files in 1.70 seconds (17.9ms each, v2.0.1) [11ty] Wrote 95 files in 1.86 seconds (19.6ms each, v2.0.1) [11ty] Wrote 95 files in 1.48 seconds (15.6ms each, v2.0.1) [11ty] Wrote 95 files in 2.06 seconds (21.7ms each, v2.0.1) [11ty] Wrote 95 files in 1.64 seconds (17.3ms each, v2.0.1) [11ty] Wrote 95 files in 1.58 seconds (16.6ms each, v2.0.1) [11ty] Wrote 95 files in 1.98 seconds (20.8ms each, v2.0.1) [11ty] Problem writing Eleventy templates: (more in DEBUG output) [11ty] EMFILE: too many open files, stat './src/DIR/index.md' (via Error) [11ty] [11ty] Original error stack trace: Error: EMFILE: too many open files, stat './src/DIR/index.md' [11ty] Wrote 0 files in 1.02 seconds (v2.0.1) [11ty] Wrote 95 files in 1.52 seconds (16.0ms each, v2.0.1) [11ty] Wrote 95 files in 1.60 seconds (16.8ms each, v2.0.1) [11ty] Wrote 95 files in 1.45 seconds (15.3ms each, v2.0.1) [11ty] Wrote 95 files in 1.53 seconds (16.1ms each, v2.0.1) [11ty] Wrote 95 files in 1.48 seconds (15.6ms each, v2.0.1) [11ty] Wrote 95 files in 1.57 seconds (16.5ms each, v2.0.1) [11ty] Wrote 95 files in 1.57 seconds (16.5ms each, v2.0.1) [11ty] Wrote 95 files in 2.01 seconds (21.2ms each, v2.0.1) [11ty] Wrote 95 files in 1.39 seconds (14.6ms each, v2.0.1) [11ty] Wrote 95 files in 2.00 seconds (21.1ms each, v2.0.1) [11ty] Wrote 95 files in 1.55 seconds (16.3ms each, v2.0.1) [11ty] Wrote 95 files in 1.52 seconds (16.0ms each, v2.0.1) [11ty] Wrote 95 files in 1.49 seconds (15.7ms each, v2.0.1) [11ty] Wrote 95 files in 1.56 seconds (16.4ms each, v2.0.1) [11ty] Wrote 95 files in 2.07 seconds (21.8ms each, v2.0.1) [11ty] Wrote 95 files in 1.62 seconds (17.1ms each, v2.0.1) [11ty] Wrote 95 files in 1.65 seconds (17.4ms each, v2.0.1) [11ty] Wrote 95 files in 1.76 seconds (18.5ms each, v2.0.1) [11ty] Wrote 95 files in 1.48 seconds (15.6ms each, v2.0.1) [11ty] Wrote 95 files in 1.86 seconds (19.6ms each, v2.0.1) [11ty] Problem writing Eleventy templates: (more in DEBUG output) [11ty] EMFILE: too many open files, stat './src/DIR/index.md' (via Error) [11ty] [11ty] Original error stack trace: Error: EMFILE: too many open files, stat './src/DIR/index.md' [11ty] Wrote 0 files in 1.12 seconds (v2.0.1) [11ty] Wrote 95 files in 1.53 seconds (16.1ms each, v2.0.1) [11ty] Wrote 95 files in 1.51 seconds (15.9ms each, v2.0.1) [11ty] Wrote 95 files in 1.49 seconds (15.7ms each, v2.0.1) [11ty] Wrote 95 files in 1.96 seconds (20.6ms each, v2.0.1) [11ty] Wrote 95 files in 1.59 seconds (16.7ms each, v2.0.1) [11ty] Wrote 95 files in 1.48 seconds (15.6ms each, v2.0.1)
已知可能的根因
- Docker容器文件描述符上限不足:Docker默认给容器的ulimit(文件描述符数量)远低于宿主机,Eleventy批量处理文件时,短时间内打开的文件数偶尔触顶,引发EMFILE错误。
- 文件系统竞态与缓存不一致:如果使用绑定挂载的宿主机目录或Docker Volume,文件系统缓存可能出现短暂不同步,导致Eleventy读取文件时出现ENOENT/ENOTDIR错误;前一次构建的文件残留或清理不及时也会触发这类竞态问题。
- Eleventy资源泄漏:Eleventy v2.x部分版本存在文件句柄未正确关闭的情况,多次重复构建后,泄漏的句柄累积达到上限,触发EMFILE错误,这类问题的间歇性源于需要多次构建才会达到阈值。
- Node.js并发文件操作超限:Node.js默认文件操作并发量较高,容器环境资源受限,并发打开文件时可能超出容器的ulimit限制,或引发文件系统的竞态问题。
内容的提问来源于stack exchange,提问作者Volker
相关产品推荐
相关产品推荐

