在构建 docker 容器时,我遇到了这个错误
Step 6/17 : RUN bower install --allow-root ---> Running in 20f9229dcd1e bower angular-touch#~1.5.0 CERT_HAS_EXPIRED Request to https://registry.bower.io/packages/angular-touch failed: certificate has expired
建立这个形象工作了大约2年,然后突然拒绝合作。 如何刷新丢失的证书?
你们可能都在使用基于旧节点 docker 映像的“非常旧”的构建堆栈,它使用旧的 Debian 发行版作为其基本映像(即
node:6
=> Debian Stretch)。
registry.bower.io 的 letsencrypt 证书好像昨天(2023 年 4 月 24 日)更新了,现在使用更现代的中间证书。这在旧的 Debian 发行版中不可用/未知。
当然是时候升级你的堆栈了,但与此同时你可以将它添加到你的 Dockerfile 中,就在你做
bower install
作为解决方法之前:
# manually remove expired letsencrypt X3 certificate and install the new ISRG X1 root CA
RUN mkdir -p /usr/share/ca-certificates/letsencrypt/ \
&& cd /usr/share/ca-certificates/letsencrypt/ \
&& curl -kLO https://letsencrypt.org/certs/isrgrootx1.pem \
&& perl -i.bak -pe 's/^(mozilla\/DST_Root_CA_X3.crt)/!$1/g' /etc/ca-certificates.conf \
&& update-ca-certificates
然后使用这个标志告诉 bower 使用系统范围的 CA 系统:
RUN NODE_OPTIONS=--use-openssl-ca bower install ...
在我的例子中,我只是在 .bowerrc 文件中添加了两行
"strict-ssl": false,
"https-proxy": "",
这是解决方法,但这是不好的做法。但是使用 bower 和过时的插件也是不好的做法
我从昨天开始收到这些错误。 我像下面这样解决了它: 如果你在 bower.json 中有这样的依赖项:
"dependencies": {
"bootstrap-sass": "3.2.0",
"jquery": "2.2.0",
...
}
然后改成:
"dependencies": {
"bootstrap-sass": "https://github.com/twbs/bootstrap-sass.git#3.2.0",
"jquery": "https://github.com/jquery/jquery.git#2.2.0",
...
}
使用您指定的版本和 git url。 你会在这里找到所有 bower 包的 git url:https://registry.bower.io/packages
bower install
仍然适用于较新版本的节点。
据我所知,证书在版本 6、7 和 8 上停止工作。
作为解决方法:我只在较新的节点(例如 12)上执行
bower install
命令,其余用于构建项目的命令在我需要的版本上执行。
它在我们的项目中起作用。
将节点版本从 8 更新到 18 为我修复了错误。