发生系统错误:uv_os_get_passwd 返回 ENOENT(没有那个文件或目录)

A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)

我有一个 jenkin 管道,当我 运行 ember 构建时,它 运行 在 docker 代理上运行,我收到此错误。 知道我该怎么做。我用

image 'node:latest'

我收到这个错误

+ ./node_modules/.bin/ember build --env production
WARNING: Node v14.3.0 is not tested against Ember CLI on your platform. We recommend that you use the most-recent "Active LTS" version of Node.js. See https://git.io/v7S5n for details.
Could not start watchman
Visit https://ember-cli.com/user-guide/#watchman for more info.
Building
A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)

原来我需要做的就是添加 docker 从 /etc/passwd 到 /etc/passwd 的卷映射。像这样:

agent {
        docker { 
            image 'node:12'
            args "-v /etc/passwd:/etc/passwd"
            reuseNode true
        }

}

在容器中使用 node-gyp 时,此问题可能掩盖了另一个缺少路径或只读路径的问题。

os.userInfo() 用法是 eaccesFallback 的一部分,只有在无法访问文件路径时才应调用。

打开详细日志记录 (npm_config_loglevel=verbose) 以记录无法访问的路径,mount/fix 改为记录该路径。

根据我的经验,这解决了根本问题并避免了安装 /etc/passwd,这可能并不总是可行或可能被认为是不安全的。

我在使用 electron-builder 时在 k8s pods 中特别看到了这一点,并且不得不为 .electron-gyp 文件夹创建一个空卷挂载:

  volumeMounts:
  - name: electron-cache
    mountPath: /.electron-gyp
  volumes:
  - name: electron-cache
    emptyDir: {}