npm UNABLE_TO_GET_ISSUER_CERT_LOCALLY在公司防火墙后面的Docker中

mlmc2os5  于 2023-04-05  发布在  Docker
关注(0)|答案(1)|浏览(71)

bounty还有6天到期。回答此问题可获得+200声望奖励。sashoalm希望引起更多关注此问题。

我在Dockerfile中以root身份运行npm时遇到错误。

> [runner  5/10] RUN npm install --global pm2:
#0 71.79 npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

我们有一个无法关闭的防病毒/企业防火墙,它取代了SSL证书来检查流量。
我的问题是,因为npm install --global pm2是以root身份运行的,所以它不荣誉export NODE_EXTRA_CA_CERTS=/path/to/my-cacert.crt
我尝试了RUN npm config set cafile /path/to/my-cacert.crt,但由于某种原因也不起作用。
在docker容器中以root身份运行npm时,如何修复UNABLE_TO_GET_ISSUER_CERT_LOCALLY
这个dockerfile重现了这个问题:

FROM node:alpine AS deps

COPY my.crt /usr/local/share/ca-certificates/
RUN cat /usr/local/share/ca-certificates/my.crt >>/etc/ssl/certs/ca-certificates.crt

RUN npm install --global pm2
oug3syen

oug3syen1#

如果你把你的Dockerfile贴出来,它会很有帮助,
但你有很多选择
1-而不是使用export设置你的NODE_EXTRA_CA_CERTSARG选项在dockerfile,它将用于所有用户不要紧,如果你改变你的用户之间的构建像这样:

FROM node:alpine AS deps

ARG NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt

COPY my.crt /usr/local/share/ca-certificates/
RUN cat /usr/local/share/ca-certificates/my.crt >>/etc/ssl/certs/ca-certificates.crt

RUN npm install --global pm2

但是如果你用export设置一个变量,它将只用于你使用exportRUN条目。记住,如果你正在进行多阶段构建,ARG的范围是他们的阶段,如果你需要在不同的阶段设置这个,你必须在每个阶段使用你的ARG
2-使用http而不是https(它不安全但可用)。您可以在配置中设置它,如下所示:npm config set registry http://registry.npmjs.org/
3-将您的CA证书添加到Dockerfile中的受信任证书,如:

...
COPY ca.crt /usr/local/share/ca-certificates/ca.crt
RUN apt update && \
  apt install -y ca-certificates && \
  update-ca-certificates
...

相关问题