【问题标题】:npm install failing inside of Docker containernpm install 在 Docker 容器内失败
【发布时间】:2020-04-09 03:57:23
【问题描述】:

我正在尝试让npm install 在我系统上的 Docker 容器内工作...

我尝试了以下容器:

  • nikolaik/python-nodejs:python3.8-nodejs12
  • nikolaik/python-nodejs:python3.8-nodejs12-alpine
  • minideb:stretch(与 nvm 一起安装)

而且他们都有同样的错误。当我尝试安装 npm 包时,会出现如下错误:

# npm install -g typescript                                                                                                                                                                                      
npm ERR! Unexpected end of JSON input while parsing near '...ipt":"next","tsd":"la'                                                                                                                                

npm ERR! A complete log of this run can be found in:                                                                                                                                                               
npm ERR!     /root/.npm/_logs/2020-04-09T03_42_16_003Z-debug.log

如果我运行npm cache clean --force 之类的东西,然后再次运行安装命令,它会在解析 JSON 的其他时候失败。

有趣的是,有时如果它是一个非常小的包,它会毫无问题地安装它:

# npm install padleft                                                                                                                                                                                   [12/1883]
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm WARN notsup Unsupported engine for padleft@0.2.0: wanted: {"node":"6.3.1","npm":"3.10.6"} (current: {"node":"12.14.1","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: padleft@0.2.0
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#1 No description
npm WARN !invalid#1 No repository field.
npm WARN !invalid#1 No README data
npm WARN !invalid#1 No license field.

+ padleft@0.2.0
added 1 package from 1 contributor and audited 2 packages in 1.472s
found 0 vulnerabilities

如果下载速度不快,就无法安装某些东西,这几乎就像是失败了。我用 nvm 尝试了不同版本的 node/npm,它们都做同样的事情。在我的主机上,npm 工作正常。只是在所有 Docker 容器中都有问题。我只是在另一个基于 Ubuntu 的 Docker 容器上安装了 nvm 版本失败。

【问题讨论】:

    标签: docker npm npm-install


    【解决方案1】:

    我只能猜测 Container 正在丢包。

    尝试为容器添加更多 CPU。

    https://docs.docker.com/config/containers/resource_constraints/

    如果您愿意尝试其他事情:如果您没有选择“主机模式网络”,请尝试。

    https://docs.docker.com/network/host/

    【讨论】:

    • 这是主机模式网络。而不是要求容器完成网络数据包的所有工作(内核非常强大......而容器很烂)。好的!它修复了它。
    • 所以问题是当我使用主机模式时,我无法像我需要的那样转发端口。我尝试将 CPU 固定到容器上,但没有帮助。
    • 我可以整天用 apt-get 或 pip install 安装东西,唯一不能用的是 npm。我不明白。如果我 ping google.com 并让它继续运行,我永远不会丢包或任何东西。
    • 好点。我会公开承认我讨厌使用 NPM 和基于 JS 的客户端渲染。没有什么是坚如磐石的,一切都是可疑的。 -- 另外,也许你想提供类似 Parallels 或 Oracle VirtualBox(免费)的东西,以确保虚拟化使容器的代码健壮
    猜你喜欢
    • 2021-01-07
    • 2020-05-25
    • 2018-07-04
    • 2021-05-08
    • 2021-12-26
    • 1970-01-01
    • 2017-08-02
    • 2021-07-05
    • 2020-12-29
    相关资源
    最近更新 更多