在 Docker 构建过程中出现 "Text file busy" 的错误提示

5
我发现了一个我认为很奇怪的Docker构建问题。这个问题似乎非常特定于我的电脑,因为我在其他机器上看到过这个构建成功。看起来像是在npm install命令期间,docker build失败并显示npm ERR! sh: 1: node-pre-gyp: Text file busy。我本来期望构建能够顺利完成而没有任何问题。如果出现任何问题,我希望它们在不同的机器上是一致的 - 毕竟这是一个Docker构建。值得注意的是,这在我的电脑上曾经正常工作,但最近突然出现了问题。我不确定发生了什么变化。我不认为我在最近几天做了任何重大的与Docker相关的更改。
我正在寻求关于如何解决这个问题的任何建议。也许过几天我会尝试重新安装Docker。无论如何,我认为这是一个有趣的问题,也许在这里讨论它会对其他人有所帮助。
以下是一个在我的电脑上失败但在其他机器上成功的最小设置。

package.json:

{
  "name": "test",
  "version": "0.1.0",
  "author": "test",
  "type": "commonjs",
  "license": "ISC",
  "dependencies": {
    "canvas": "^2.11.2"
  }
}

Dockerfile

FROM node:slim

WORKDIR /app

COPY ./package.json ./
RUN npm install

运行 docker build --pull --no-cache . 失败,显示错误信息

[+] Building 3.3s (8/8) FINISHED                                                                    
 => [internal] load build definition from Dockerfile                                           0.0s
 => => transferring dockerfile: 107B                                                           0.0s
 => [internal] load .dockerignore                                                              0.0s
 => => transferring context: 2B                                                                0.0s
 => [internal] load metadata for docker.io/library/node:slim                                   0.1s
 => [1/4] FROM docker.io/library/node:slim@sha256:bffbb1bf1a3afd6fbdd822bda7f1e7cb07eb407f3dc  0.0s
 => [internal] load build context                                                              0.0s
 => => transferring context: 201B                                                              0.0s
 => CACHED [2/4] WORKDIR /app                                                                  0.0s
 => [3/4] COPY ./package.json ./                                                               0.0s
 => ERROR [4/4] RUN npm install                                                                3.1s
------
 > [4/4] RUN npm install:
#0 3.026 npm notice 
#0 3.026 npm notice New minor version of npm available! 9.6.7 -> 9.7.1
#0 3.026 npm notice Changelog: <https://github.com/npm/cli/releases/tag/v9.7.1>
#0 3.026 npm notice Run `npm install -g npm@9.7.1` to update!
#0 3.026 npm notice 
#0 3.027 npm ERR! code 126
#0 3.027 npm ERR! path /app/node_modules/canvas
#0 3.028 npm ERR! command failed
#0 3.028 npm ERR! command sh -c node-pre-gyp install --fallback-to-build --update-binary
#0 3.028 npm ERR! sh: 1: node-pre-gyp: Text file busy
#0 3.029 
#0 3.029 npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2023-06-19T16_22_22_524Z-debug-0.log
------
Dockerfile:6
--------------------
   4 |     
   5 |     COPY ./package.json ./
   6 | >>> RUN npm install
   7 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c npm install" did not complete successfully: exit code: 126


在这个例子中,我正在使用一个canvas包。我也看到了这个问题,例如与@ory/cli包一起使用时出现的问题。这个问题似乎出现在运行一些额外脚本的NPM包安装期间。目前,我不确定这是一个Docker问题还是NPM问题。
有一些讨论在https://github.com/moby/moby/issues/9547中,但是提出的解决方案(sleep/sync和将存储驱动更改为overlay2)都不适用于这里。我无法插入一个延迟,因为问题发生在npm install命令期间,而且我不能切换到overlay2,因为...我已经在使用overlay2
"dockerfile"文本文件繁忙中有一些讨论,建议作者修改他们构建和注入休眠的文件。在我的情况下,当与第三方NPM包一起工作时会出现这种情况,在其他情况下似乎正常工作,所以我无法修改那段代码。我也不能注入休眠,因为故障发生在npm install命令期间。 docker info的输出结果。
Client: Docker Engine - Community
 Version:    24.0.0
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.4
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.17.3
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 8
  Running: 2
  Paused: 0
  Stopped: 6
 Images: 8
 Server Version: 24.0.0
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
 runc version: v1.1.7-0-g860f061
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 5.15.0-43-generic
 Operating System: Ubuntu 22.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 20
 Total Memory: 15.3GiB
 Name: mateusz-mcss
 ID: FLNN:HZMZ:5PZG:VHGO:2BCN:6MKS:5C4I:DJQT:DT5J:CIGG:QGFD:UYRS
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
1个回答

8

这个确实有效。谢谢! - Mateusz Kraiński

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接