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

Docker构建时出现‘Text file busy’错误的排查求助

解决Docker构建中node-pre-gyp: Text file busy的本地独有问题

问题背景

本地执行docker build --pull --no-cache .时,npm安装依赖(如canvas、@ory/cli)阶段出现npm ERR! sh: 1: node-pre-gyp: Text file busy错误,其他机器可正常构建;已使用overlay2存储驱动,无法修改第三方包的安装脚本注入sleep。Docker版本24.0.0,宿主机为Ubuntu 22.04.2 LTS。

可行解决方案

1. 彻底清理Docker系统缓存

执行以下命令清理所有无用的容器、镜像、构建缓存和卷:

docker system prune -af

清理完成后重新尝试构建,可消除因缓存损坏导致的异常。

2. 调整Overlay2存储驱动配置

编辑Docker守护进程配置文件/etc/docker/daemon.json(不存在则创建),添加metacopy启用配置:

{
  "storage-driver": "overlay2",
  "storage-opts": ["overlay2.metacopy=true"]
}

保存后重启Docker服务:

sudo systemctl restart docker

metacopy模式会改变Overlay2的文件复制方式,可解决文件占用冲突问题。

3. 更换Node基础镜像版本

将Dockerfile中的node:slim替换为指定稳定版本,例如:

FROM node:18-slim

WORKDIR /app

COPY ./package.json ./
RUN npm install

不同版本的Node镜像可能包含不同的npm或系统依赖版本,可避开当前镜像中存在的文件系统交互bug。

4. 强制本地构建绕过预编译包

修改Dockerfile中的npm install命令,添加--build-from-source参数,强制跳过预编译包下载,直接本地构建依赖:

FROM node:slim

WORKDIR /app

COPY ./package.json ./
RUN npm install --build-from-source

此方法避免调用node-pre-gyp下载预编译文件,从根源绕开文件占用问题。

5. 检查宿主机文件系统健康

停止Docker服务:

sudo systemctl stop docker

检查Docker数据目录(默认/var/lib/docker)所在分区的文件系统:

sudo fsck /dev/[你的分区设备名]

注意:执行fsck前需确保分区已卸载,避免损坏数据。文件系统错误可能导致Docker构建时出现文件占用异常。

内容的提问来源于stack exchange,提问作者Mateusz Kraiński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:53:10