linux - npm install 在 docker 内部的私有存储库中未运行准备钩子
问题描述
从私有 git 存储库安装时,似乎不会调用 linux 中的准备钩子。我正在使用 alpine 映像并尝试在其中构建我的私有包,npm install
但准备钩子不会被调用。至少如果我进入node_modules
文件夹检查是否存在 lib 文件夹,它不在这里。
这是一种测试 dockerfile,我知道至少应该通过中间阶段注入 ssh 密钥,以免泄漏它们。只是为了测试,我已经按原样做了。
FROM node:8-alpine
RUN apk --update add --no-cache openssh-client
RUN apk add git
# add credentials on build
RUN mkdir /root/.ssh/
COPY ./id_rsa /root/.ssh/
RUN chmod 400 /root/.ssh/id_rsa
# make sure your domain is accepted
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
WORKDIR /app
COPY package.json .
#COPY package-lock.json .
RUN npm install
COPY index.js .
ENTRYPOINT [ "node", "index.js" ]
部分代码是私有的,所以我不能分享它,但它已成功安装在 windows 机器下,所有序列和最终包运行正常。在这个 docker 示例中,它不是。
我查看了这个问题 npm v6.4.1 not running `prepare` inside docker 但是提出的解决方案对我不起作用,所以也许还有更多。
如何启用在 alpine 图像上运行的准备钩子npm install
?
解决方案
我的 CI 管道也有同样的问题。带着标志跑后-ddd
,我看到了警告prepare: cannot run in wd
。在允许 unsafe-permissions ( npm config set unsafe-perm true
) 之后,prepare
脚本被执行,并且包被构建。
资料来源:https ://npm.community/t/silent-npm-warn-cannot-run-in-wd-during-preparegitdep/8329/2
推荐阅读
- java - 如何在应用加载时在 ListView 上显示从 Firebase 实时数据库检索到的内容
- css - 使用 input-group-append 添加的图标似乎比输入框大
- android - 在 Android OpenGL ES 3.1 上设置 Framebuffer 的深度/模板缓冲区
- python - 如何在 Python 中使用 Selenium 更改输入元素中的值?
- node.js - 是否可以使用 node js 在 redis 中编写条件转换
- jenkins-pipeline - Jenkins.instance.getItem 在文件夹中的作业失败
- security - 分层加密?-或者我是一个天真的新手?
- angular - 如何通过数字升序格式化 ng bootstrap typeahead 结果
- bash - 如何使用“if”来生成 shell 管道的一部分?
- python - 使用 ord() 的 Python 串行读取线