sas*_*alm 6 ssl-certificate npm docker
我在 Dockerfile 中以 root 身份运行 npm 时遇到错误。
> [runner 5/10] RUN npm install --global pm2:
#0 71.79 npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY
Run Code Online (Sandbox Code Playgroud)
我们有一个无法关闭的防病毒/企业防火墙,它可以替代 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,但由于某种原因也不起作用。
UNABLE_TO_GET_ISSUER_CERT_LOCALLY在 docker 容器中以 root 身份运行 npm 时如何修复?
此 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
Run Code Online (Sandbox Code Playgroud)
小智 1
如果你发布你的 Dockerfile 将会很有帮助,
但您有多种选择。
1-而不是在 dockerfile 中使用exportset your NODE_EXTRA_CA_CERTSwithARG选项,它将用于所有用户,如果您在构建之间更改用户,则无关紧要,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
但是,如果您设置一个变量,export它将仅用于RUN您使用的条目export。请记住,如果您正在进行多阶段构建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
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |