npm v6.4.1 未在 docker 内运行 `prepare`

2024-04-11

我正在尝试在 docker 容器内安装一个包,但是prepare脚本没有运行。

这里有一个Dockerfile这复制了这个问题:

FROM ubuntu:18.04
# Replace shell with bash so we can source files to use npm
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && apt-get upgrade -y
RUN apt-get install wget git -y
RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
RUN source ~/.nvm/nvm.sh; nvm install v10.12.0; nvm use v10.12.0
RUN mkdir -p /usr/app/
WORKDIR /usr/app/
RUN source ~/.nvm/nvm.sh; npm install jcollard/d3-ng2-service#jcollard/add-dist

以上安装完毕nvm并切换到使用node v10.12.0 and npm v6.4.1在尝试直接从 github 安装软件包之前,这应该会失败。

$ docker build -t npm-hack:latest .
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; npm --version'
6.4.1
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; node --version'
v10.12.0

docker 命令的最后一行should fail.

The package.json位于该存储库分支上的位置如下:https://github.com/jcollard/d3-ng2-service/blob/jcollard/add-dist/package.json#L15 https://github.com/jcollard/d3-ng2-service/blob/jcollard/add-dist/package.json#L15

你会看到的"prepare": "BREAK BREAK BREAK",

当我在 docker 容器之外运行它时,这会导致预期的错误:

$ npm install jcollard/d3-ng2-service#jcollard/add-dist
npm ERR! prepareGitDep 1>
npm ERR! prepareGitDep > [email protected] /cdn-cgi/l/email-protection prepare /home/jcollard/.npm/_cacache/tmp/git-clone-77d32f21
npm ERR! prepareGitDep > BREAK BREAK BREAK
npm ERR! prepareGitDep
npm ERR! prepareGitDep
npm ERR! prepareGitDep 2> npm WARN install Usage of the `--dev` option is deprecated. Use `--only=dev` instead.
npm ERR! prepareGitDep sh: 1: BREAK: not found
npm ERR! prepareGitDep npm ERR! file sh
npm ERR! prepareGitDep npm ERR! code ELIFECYCLE
npm ERR! prepareGitDep npm ERR! errno ENOENT
npm ERR! prepareGitDep npm ERR! syscall spawn
npm ERR! prepareGitDep npm ERR! [email protected] /cdn-cgi/l/email-protection prepare: `BREAK BREAK BREAK`
npm ERR! prepareGitDep npm ERR! spawn ENOENT
npm ERR! prepareGitDep npm ERR!
npm ERR! prepareGitDep npm ERR! Failed at the [email protected] /cdn-cgi/l/email-protection prepare script.
npm ERR! prepareGitDep npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

我假设本地有一些配置可以通知npm to run prepare但我似乎找不到它。任何帮助,将不胜感激。

Thanks!


那是一个有趣的兔子洞。就是这个bug:https://github.com/npm/npm/issues/17346 https://github.com/npm/npm/issues/17346。准备不以 root 身份运行。您可以以非 root 身份运行容器,但我只是使用了问题中的修复程序。

我把你的最后一行改成这样

RUN source ~/.nvm/nvm.sh; npm config set unsafe-perm true; npm install jcollard/d3-ng2-service#jcollard/add-dist

现在正如预期的那样失败了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

npm v6.4.1 未在 docker 内运行 `prepare` 的相关文章

随机推荐

  • 创建二进制 PBM/PGM/PPM

    我试图了解如何创建二进制 PBM PGM PPM 文件 据我所知 每种格式有两种类型 普通格式和原始格式 例如 黑色 PBM 5x5 的结构如下所示 P1 This is a comment 5 5 1 1 1 1 1 1 1 1 1 1
  • Visual Studio 2015 如何禁用异常输出

    我正在制作一个带有更新和绘制的 C 应用程序 我发现更新确实很慢 尽管没有任何沉重的表达 在独立于 Visual Studio 启动我的应用程序后 我发现它的速度快了 100 倍 问题是 对于每个 try catch VStudio 都会在
  • 使用 asp:Button 将参数传递到函数中

    我正在尝试将参数传递给函数onClick of an asp Button
  • 从 Ada 代码构建静态库,无需 GNAT 即可链接

    我正在尝试从 Ada 代码创建一个静态库 该库可以与一些 C 代码链接 而无需使用 GNAT 工具进行最终链接 我的用例是 我正在尝试将一个用 Ada 编写的库交付给一个为嵌入式目标构建的 C 代码库 为目标构建最终二进制文件的工具链不包含
  • 从使用 List 的 .Net 调用 Java Web 服务

    我正在开发一个将由 Net 客户端使用的 Java Web 服务 该服务公开一个接受对象作为参数的方法 该对象有一个 List 类型的字段 Row 类也有一个 List 类型的字段 现在 当 Java 客户端使用此服务时 它会正确地将类型视
  • 是否可以在 React 中使用 Polymer?

    我一直在使用 React 并希望在 React 中使用 Polymer 标签 React 无法识别 Polymer 标签 因为 React 仅处理基本 DOM 标签 有没有办法将 Polymer 标签添加到 React DOM 库 对的 这
  • 有独立的Python类型转换库吗?

    是否有独立的类型转换库 我有一个仅理解字节 字符串的数据存储系统 但我可以标记元数据 例如要转换为的类型 我可以破解一些简单的类型转换器系统 就像我之前的所有其他应用程序所做的那样 或者我可以希望使用一个独立的库 除非我找不到一个 对于这样
  • 将 C# Stateful Service Fabric 应用程序从 Visual Studio 部署到 Linux

    编辑 04 06 18 gt 更新了问题的最新状态 因此 我有一个正在运行的 Net 4 6 Stateful Service 它当前在部署在 Azure 上的 Windows Service Fabric 集群上运行 从 09 2017
  • R(以前称为 Excel Solver)中预算分配的优化

    我将 Excel 中遇到的问题翻译成 R 我想以 Gesamt 由函数返回 最大化的形式分配固定预算 NrwGes lt function Budget Speed maxnrw cpcrp BudgetA lt Budget 1 Budg
  • 合并具有索引的数据帧,其中一个数据帧包含另一个数据帧(但不相同)

    例如 df1 具有形状 533 2176 指数如Elkford 5901003 DM 01010 df2 具有形状 743 12 指数如5901003 df1 索引括号中的数字将与 df2 的索引匹配 正如形状所示 一些索引根本不匹配 现在
  • Jquery修改每个循环中的元素

    使用jquery 我想循环具有 item 类的所有元素 并根据元素的索引应用不同的背景颜色 mapcolor 是颜色数组 长度 具有 item 类的元素数量 each item function i e e css background c
  • C# - 互斥锁的锁定问题

    我有一个 Web 应用程序 可以控制哪些 Web 应用程序从我们的负载均衡器获取服务流量 Web 应用程序在每个单独的服务器上运行 它在 ASP NET 应用程序状态的对象中跟踪每个应用程序的 输入或输出 状态 并且只要状态发生更改 该对象
  • WPF ControlTrigger IsMouseOver

    当我尝试更改 WPF 触发器 IsMouseOver 按钮的图像时 控件闪烁很多 此问题有任何解决方法吗 使用相对绑定并找到更深层的祖先 它必须具有永久的IsMouseOver财产
  • Javascript - 你能在错误中抛出一个对象吗?

    是否可以使用抛出一个对象Error 在下面的示例中 控制台显示undefined try throw Error foo bar catch err console log err message foo 您可以抛出自己的对象 并将 Err
  • 模板内的 MVC 助手

    我正在尝试在模板中使用 kendo MVC 助手 远程模板文件加载如下 http docs kendoui c om howto load templates external files remote templates http doc
  • 部分检查中的 Prop,但仍然未定义?

    我使用的是 Typescript 3 7 2 但在早期的 Typescript 版本中也会发生这种情况 strictNullChecks 已打开 我有这个小代码片段 interface Test one boolean two boolea
  • Android 上的 Google 身份验证令牌多久过期一次? (或者:如何不打扰奶奶)

    我正在 Android 上为我的奶奶编写一个相框应用程序 该应用程序会自动更新她的 Picasa 相册中的图片 并不是说她知道 Picasa 是什么 该应用程序将使用她注册的 Google 帐户自动登录 Picasa 并不是说她知道什么是
  • 如何通过 link_to helper 从 Rails 视图中将参数传递给控制器​​操作

    这是我的link to视野中的帮手 我想在其中附加一个参数link to标记以便我可以在操作中获取它connectTo 我无法找到正确的语法或方法 也无法理解我在 stackoverflow 上找到的一些答案 我怎样才能实现这个目标 def
  • java.lang.UnsatisfiedLinkError:找不到要加载的 DSO:libfbjni.so 结果:0

    我创建了一个新的react native项目并将我的android本机模块添加为依赖项 使用官方文档https reactnative dev docs native modules setup https reactnative dev
  • npm v6.4.1 未在 docker 内运行 `prepare`

    我正在尝试在 docker 容器内安装一个包 但是prepare脚本没有运行 这里有一个Dockerfile这复制了这个问题 FROM ubuntu 18 04 Replace shell with bash so we can sourc