Tho*_*mas 6 npm font-awesome docker docker-compose
我正在使用一个.npmrc文件来配置一个私有仓库 (font-awesome-pro)。
它在没有 docker 的情况下运行良好。
但是对于 docker,npm install失败了:
npm ERR! code E401
npm ERR! 404 401 Unauthorized: @fortawesome/fontawesome-pro-light@https://npm.fontawesome.com/7D46BEC2-1565-40B5-B5FC-D40C724E60C6/@fortawesome/fontawesome-pro-light/-/fontawesome-pro-light-5.0.12.tgz
Run Code Online (Sandbox Code Playgroud)
我已经阅读了 NPM 的文档:Docker 和私有包,但我不知道如何应用它,docker-compose.yml我不确定传递变量是解决方案(?)。是否有可能.npmrc在 docker 实例中安装期间未读取该文件?我错过了什么吗?
这是我的docker-compose.yaml:
npm ERR! code E401
npm ERR! 404 401 Unauthorized: @fortawesome/fontawesome-pro-light@https://npm.fontawesome.com/7D46BEC2-1565-40B5-B5FC-D40C724E60C6/@fortawesome/fontawesome-pro-light/-/fontawesome-pro-light-5.0.12.tgz
Run Code Online (Sandbox Code Playgroud)
和我的.npmrc(用替换的令牌):
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
解决此问题的正确方法(如您引用的链接中所述)是在 dockerfile 中使用 arg 变量。我认为您缺少的是如何在撰写中执行此操作:
version: "3"
services:
myapp:
build:
context: "."
args:
NPM_TOKEN: "s3kr!t"
Run Code Online (Sandbox Code Playgroud)
您需要在 dockerfile 中引用此参数,并在项目的根目录中创建一个 .npmrc 文件:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Run Code Online (Sandbox Code Playgroud)
我喜欢在 dockerfile 中生成它,以最大程度地降低暴露风险(但是,请注意,令牌仍然存储在图像的层中),因此它看起来像这样:
FROM node:current-buster-slim
ARG NPM_TOKEN
WORKDIR /app
COPY package.json /app/package.json
RUN echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > /app/.npmrc && \
npm install && \
rm -f /app/.npmrc
COPY . /app/
CMD npm start
Run Code Online (Sandbox Code Playgroud)
然后你就可以运行docker-compose build myapp并获得良好的结果。该解决方案仍然受到撰写文件和 docker 映像中包含秘密的影响,但这只是一个草图。在现实世界中,您不希望将机密放入源文件中,因此您可以将机密替换为具有较短生存时间 (TTL) 和一次性策略的动态机密(并且您我可能想使用 Hashicorp Vault 来帮助解决这个问题)。
| 归档时间: |
|
| 查看次数: |
8299 次 |
| 最近记录: |