前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个关于 Nodejs Dockerfile 的小优化

一个关于 Nodejs Dockerfile 的小优化

作者头像
老麦
发布2024-02-26 21:18:33
1310
发布2024-02-26 21:18:33
举报
文章被收录于专栏:Go与云原生Go与云原生

一个关于 Nodejs Dockerfile 的小优化

建议点击 查看原文 查看最新内容。

原文链接: https://typonotes.com/posts/2024/02/20/a-simple-optimizion-for-nodejs-dockerfile/

原版 Dockerfile 如下。

代码语言:javascript
复制
FROM ${BASE_IMAGE} as env

RUN mkdir -p /app && chown -R node:node /app
WORKDIR /app
COPY package*.json ./
COPY .npmrc ./
USER node

## 问题在这里, npm install 失败之后, 无法看到具体错误
RUN npm install

在执行完成 npm install 之后没有更多的 错误判断

  1. 如果没有出错, 一切都正常。往下走就行了。
  2. 但是执行出错 npm 会将错误放在一个 错误文件中, 需要用户自行查询。
代码语言:javascript
复制
#10 13.06 npm ERR!     /home/node/.npm/_logs/2024-02-16T08_23_58_047Z-debug.log

可以从图片中看到, 这里的输出都是执行日志, 都是 WARN。根本不是根因。

很显然 在 CI 中是没办法登录到打包机上手动查看错误的文件的额。

优化方案

因此需要对这行命令做一个简单的优化。在 npm install 失败的时候, 使用 tail 查看最后 100 行错误日志。

这是完整的 shell 脚本。

代码语言:javascript
复制
# run npm install; if it fails, print the logs and exit
npm install
RET=$?
if [[ $RET -ne 0 ]]; then
    tail -n 100 $HOME/.npm/_logs/*.log
    exit $RET
fi

内容很简单,

  1. 保存 npm isntall 的 退出值
  2. 如果 不等于0 则表示有错。
    1. 使用 tail 命令查看所有日志文件的最后 100 行
    2. 并使用 退出值 退出。

由于在打包机上每次执行前虚拟环境将被清空, 所以只有一个文件的错误日志。

更新 Dockerfile

在更新后 Dockerfile 中, 为了方便还是将 shell 脚本最小化成 一行 了。

代码语言:javascript
复制
FROM ${BASE_IMAGE} as env
# ...

# run npm install; if it fails, print the logs and exit
RUN npm install; RET=$?; if [[ $RET -ne 0  ]]; then tail -n 100 $HOME/.npm/_logs/*.log; exit $RET; fi;

再次执行之后, 可以看到。日志中的正式错误是私有包鉴权失败导致的。

代码语言:javascript
复制
#10 12.78 20372 verbose statusCode 401
...

#10 12.78 20380 error Unable to authenticate, need: Basic realm="Artifactory Realm"
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优化方案
  • 更新 Dockerfile
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档