场景一、提示无python

之前在通过dockerfile 构建 node 镜像时会报gyp ERROR!can't find python

我的代码大致是这样子

FROM node:14-alpine
RUN yarn

 后来我尝试搭建python环境,结果失败了。可能是docker 中不同层环境隔离导致的。

FROM python:2.7.9
FROM node:14-alpine
RUN npm config set python = xxxxx
RUN yarn

 当然,也有先搭建python 环境,通过pip 下载node的方法:Docker镜像同时兼有Python与Node环境 

不过麻烦一点,后来当我将node alpine 改为 node 时,问题得到了解决。

FROM node:14.17

场景二:无法获取ca证书unable to verify the first certificate

一般可以通过安装证书或是改配置解决。我开始是直接通过dockerfile 中插入命令,但实际运行的时候并没有生效。

RUN yarn config set strict-ssl false && npm config set strict-ssl false

后来我猜测可能还是环境隔离的原因。因此我重新拉取了官方node镜像 ,并通过创建容器,进入容器更改配置文件,然后根据容器生成了新的镜像。使用新的镜像构建时,没有出现问题了。

场景三:gyp ERROR!http GET https://nodejs.org/download/release/v14.17.4/node-v14.17.4-headers.tar.gz

执行yarn命令时,会返回 node-gyp ERROR!错误。因为node-gyp 会尝试去 nodejs.org 下载 header 文件。但是因为网络的问题,下载会出问题,会返回

gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: read ECONNRESET

简单翻译下,就是网络连接不稳定。关于gyp 为啥要下这个包,以及为什么gyp下载走的代理跟npm不一致,可以参考知乎写的一篇文章。虽然看不太懂,但肯定比我这个半吊子强。

从源码分析node-gyp指定node库文件下载地址 - 知乎

但是我在网上找不到能提供node-header 文件的镜像地址,主流的国内镜像似乎都没有。没办法,只能通过其他方式下载(偶尔官网直连也可以下载)。

下载完成后,还是通过之前的方式,通过镜像生成容器,容器中上传node-header 文件,然后执行下面的命令。再重新生成镜像就可以了。

npm config set tarball /xx/xxx.tar.gz

我的是linux环境,windows环境可以参考

node-gyp 下载 node-headers 和 node.lib