当我在 docker 上执行 npm install 时出现问题

Posted

技术标签:

【中文标题】当我在 docker 上执行 npm install 时出现问题【英文标题】:Problem when I execute npm install on docker 【发布时间】:2019-02-05 07:09:00 【问题描述】:

与同事在同一个项目上工作,在执行 npm install 时,我遇到了以下问题,尽管我的同事都没有遇到同样的问题。我们都使用docker环境,linux容器。

这是错误:

npm install
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0

> node-sass@4.9.3 install /var/www/node_modules/node-sass
> node scripts/install.js

fs.js:113
    throw err;
    ^

Error: EINVAL: invalid argument, open '/var/www/node_modules/node-sass/package.json'
    at Object.openSync (fs.js:434:3)
    at Object.readFileSync (fs.js:339:35)
    at Object.Module._extensions..json (internal/modules/cjs/loader.js:706:20)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/var/www/node_modules/node-sass/lib/extensions.js:7:9)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
npm WARN rollback Rolling back is-fullwidth-code-point@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/gauge/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back camelcase@3.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/sass-graph/node_modules/camelcase'
npm WARN rollback Rolling back string-width@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/gauge/node_modules/string-width'
npm WARN rollback Rolling back is-fullwidth-code-point@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/sass-graph/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back string-width@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/sass-graph/node_modules/string-width'
npm WARN rollback Rolling back abbrev@1.1.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/abbrev'
npm WARN rollback Rolling back assert-plus@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/assert-plus'
npm WARN rollback Rolling back aws-sign2@0.7.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/aws-sign2'
npm WARN rollback Rolling back caseless@0.12.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/caseless'
npm WARN rollback Rolling back console-control-strings@1.1.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/console-control-strings'
npm WARN rollback Rolling back aws4@1.8.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/aws4'
npm WARN rollback Rolling back forever-agent@0.6.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/forever-agent'
npm WARN rollback Rolling back extend@3.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/extend'
npm WARN rollback Rolling back has-unicode@2.0.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/has-unicode'
npm WARN rollback Rolling back block-stream@0.0.9 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/block-stream'
npm WARN rollback Rolling back is-typedarray@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/is-typedarray'
npm WARN rollback Rolling back isstream@0.1.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/isstream'
npm WARN rollback Rolling back jsbn@0.1.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/jsbn'
npm WARN rollback Rolling back lodash.mergewith@4.6.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/lodash.mergewith'
npm WARN rollback Rolling back lodash.clonedeep@4.5.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/lodash.clonedeep'
npm WARN rollback Rolling back oauth-sign@0.8.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/oauth-sign'
npm WARN rollback Rolling back safer-buffer@2.1.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/safer-buffer'
npm WARN rollback Rolling back ansi-styles@2.2.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-sass/node_modules/ansi-styles'
npm WARN rollback Rolling back osenv@0.1.5 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/osenv'
npm WARN rollback Rolling back supports-color@2.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-sass/node_modules/supports-color'
npm WARN rollback Rolling back tunnel-agent@0.6.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/tunnel-agent'
npm WARN rollback Rolling back chalk@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-sass/node_modules/chalk'
npm WARN rollback Rolling back camelcase@3.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/yargs-parser/node_modules/camelcase'
npm WARN rollback Rolling back bcrypt-pbkdf@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/bcrypt-pbkdf'
npm WARN rollback Rolling back tweetnacl@0.14.5 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/tweetnacl'
npm WARN rollback Rolling back npmlog@4.1.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/npmlog'
npm WARN rollback Rolling back are-we-there-yet@1.1.5 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/are-we-there-yet'
npm WARN rollback Rolling back wide-align@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/wide-align'
npm WARN rollback Rolling back true-case-path@1.0.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/true-case-path'
npm WARN rollback Rolling back semver@5.3.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-gyp/node_modules/semver'
npm WARN rollback Rolling back asynckit@0.4.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/asynckit'
npm WARN rollback Rolling back async-foreach@0.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/async-foreach'
npm WARN rollback Rolling back dashdash@1.14.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/dashdash'
npm WARN rollback Rolling back delayed-stream@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/delayed-stream'
npm WARN rollback Rolling back extsprintf@1.3.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/extsprintf'
npm WARN rollback Rolling back delegates@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/delegates'
npm WARN rollback Rolling back cross-spawn@3.0.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-sass/node_modules/cross-spawn'
npm WARN rollback Rolling back combined-stream@1.0.6 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/combined-stream'
npm WARN rollback Rolling back getpass@0.1.7 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/getpass'
npm WARN rollback Rolling back har-validator@5.0.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/har-validator'
npm WARN rollback Rolling back json-stringify-safe@5.0.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/json-stringify-safe'
npm WARN rollback Rolling back in-publish@2.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/in-publish'
npm WARN rollback Rolling back har-schema@2.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/har-schema'
npm WARN rollback Rolling back form-data@2.3.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/form-data'
npm WARN rollback Rolling back nopt@3.0.6 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/nopt'
npm WARN rollback Rolling back nan@2.11.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/nan'
npm WARN rollback Rolling back verror@1.10.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/verror'
npm WARN rollback Rolling back tough-cookie@2.3.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/tough-cookie'
npm WARN rollback Rolling back jsprim@1.4.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/jsprim'
npm WARN rollback Rolling back ecc-jsbn@0.1.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/ecc-jsbn'
npm WARN rollback Rolling back qs@6.5.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/qs'
npm WARN rollback Rolling back request@2.87.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/request'
npm WARN rollback Rolling back gaze@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/gaze'
npm WARN rollback Rolling back http-signature@1.2.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/http-signature'
npm WARN rollback Rolling back globule@1.2.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/globule'
npm WARN rollback Rolling back tar@2.2.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/tar'
npm WARN rollback Rolling back fstream@1.0.11 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/fstream'
npm WARN rollback Rolling back yargs@7.1.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/sass-graph/node_modules/yargs'
npm WARN rollback Rolling back json-schema@0.2.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/json-schema'
npm WARN rollback Rolling back performance-now@2.1.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/performance-now'
npm WARN rollback Rolling back asn1@0.2.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/asn1'
npm WARN rollback Rolling back source-map@0.4.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/scss-tokenizer/node_modules/source-map'
npm WARN rollback Rolling back stdout-stream@1.4.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/stdout-stream'
npm WARN rollback Rolling back sshpk@1.14.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/sshpk'
npm WARN rollback Rolling back laravel-mix@2.1.14 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/laravel-mix'
npm WARN rollback Rolling back node-gyp@3.8.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-gyp/node_modules/semver'
npm WARN rollback Rolling back sass-graph@2.2.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/sass-graph/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back gauge@2.7.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/gauge/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back scss-tokenizer@0.2.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/scss-tokenizer/node_modules/source-map'
npm WARN rollback Rolling back yargs-parser@5.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/yargs-parser/node_modules/camelcase'
npm WARN rollback Rolling back node-sass@4.9.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/node_modules/node-sass/node_modules/chalk'
npm WARN bootstrap@4.1.3 requires a peer of popper.js@^1.14.3 but none is installed. You must install peer dependencies yourself.
npm WARN img-loader@3.0.0 requires a peer of imagemin@^5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN ajv-keywords@3.2.0 requires a peer of ajv@^6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted "os":"darwin","arch":"any" (current: "os":"linux","arch":"x64")

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.9.3 install: `node scripts/install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-sass@4.9.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-08-30T10_12_31_719Z-debug.log

我试试:

rm -rf 节点模块 rm package-lock.json yarn.lock npm 缓存清除 --force npm 配置设置用户 0 npm config set unsafe-perm true npm install -g sm npm 安装 npm install --no-bin-links

但没有成功。

谢谢

【问题讨论】:

尝试运行这个命令npm rebuild node-sass 我尝试了同样的错误:( 你试过docker run npm rebuild node-sass(或者docker-compose run npm rebuild node-sass,如果使用docker compose)?在遇到与您执行docker-compose run npm install 相同的问题时,它对我有用。所以基本上我进行了重建并再次安装,结果没有问题 【参考方案1】:

我有一个带有 docker 的 Windows 10,我使用以下解决方法。进入docker,在我家我创建一个目录,例如:

/home/my_project/node_modules.

它们在我在 windows 和 linux 中的映射目录中(进入 docker)我在“node_modules”之前创建的目录中创建了一个符号链接。类似的东西

ln -s src 目标

ln -s /home/my_project/node_modules /var/www/html/my_project/node_modules

他们,进入我的项目我称之为

npm 安装

有了这个解决方案,node-sass 安装没有问题。

我不是专家,但我认为问题在于 windows 和 linux 中的映射以及 npm 安装链接此包的方式。

最好的问候

【讨论】:

【参考方案2】:

由于在readFileSync/openSync 上失败,这可能与 Docker 和您的主机 (Windows) 之间的文件同步问题有关。它在 /var/www 中失败,这很可能是您作为 Docker 容器内的卷共享的文件夹。

至于解决方法,您可以exclude a node_modules sub-folder and make it persistent。

如果您使用的是 docker-compose.yml,请挂载一个持久的 docker 卷来代替您的本地 node_modules 目录,例如

...
  volumes:
    - .:/var/www
    - node_modules:/var/www/node_modules

见:Add a volume to Docker, but exclude a sub-folder

相关 GitHub 问题:EINVAL: invalid argument, open 'node-sass/package.json'。

还要检查node-sass's troubleshooting page。

相关问题:npm install on laradock not working。

【讨论】:

【参考方案3】:

npm install 在安装 node-sass 时正在下降。我个人多次遇到过这个问题,npm rebuild node-sass 命令总是可以帮助我。

希望,它也适合你 :)

【讨论】:

以上是关于当我在 docker 上执行 npm install 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

我在本地计算机上的何处放置'$ npm install $ npm development']]

npm install 在 docker 的 jenkins 管道中失败

`npm install`卡住不动,使用`sudo npm install`就可以下载依赖包

当我运行`npm install`时,它返回`ERR!代码 EINTEGRITY` (npm 5.3.0)

当我在 react app 上执行 npm start 时,不断收到“?端口 3000 上已经有东西在运行”

npm:后安装未在 docker 中运行