升级Node.js至16.14.2后Docker部署安装sentry-cli遇ERR_INVALID_PROTOCOL错误
升级Node.js后Docker中sentry-cli安装失败的解决办法
问题根因
报错Protocol "https:" not supported. Expected "http:",本质是Node.js 16的网络模块对代理的处理逻辑和12不同,加上你的代理是http协议,sentry-cli安装脚本拉取https资源时,没正确处理协议转换,导致请求被错误地用http协议发送到https地址。
具体解决方法
1. 补全代理环境变量
Docker构建时,除了HTTP_PROXY,必须设置HTTPS_PROXY(大写),因为拉取https资源需要这个变量:
# 把这几行加到你的Dockerfile里 ENV HTTP_PROXY=http://pkg.proxy.prod.jp.local:10080/ ENV HTTPS_PROXY=http://pkg.proxy.prod.jp.local:10080/ ENV NO_PROXY=localhost,127.0.0.1
另外要确认你的代理服务器支持转发https请求(也就是允许CONNECT方法),如果不支持,得找运维开权限。
2. 手动导入sentry-cli二进制文件
绕开自动下载的坑,直接把二进制文件放进镜像:
- 先在本地通过代理下载好
sentry-cli-Linux-x86_64文件 - 然后在Dockerfile里复制并赋权:
COPY ./sentry-cli-Linux-x86_64 /usr/local/bin/sentry-cli RUN chmod +x /usr/local/bin/sentry-cli
要是能直接通过代理ADD,也可以这么写:
ADD https://downloads.sentry-cdn.com/sentry-cli/2.9.0/sentry-cli-Linux-x86_64 /usr/local/bin/sentry-cli RUN chmod +x /usr/local/bin/sentry-cli
3. 给npm安装指定代理参数
如果是通过npm安装@sentry/cli,可以直接在安装命令里加代理,或者先配置npm的代理:
# 先配置npm代理 RUN npm config set proxy http://pkg.proxy.prod.jp.local:10080/ RUN npm config set https-proxy http://pkg.proxy.prod.jp.local:10080/ # 再安装sentry-cli RUN npm install @sentry/cli@2.9.0
或者一次性带参数安装:
RUN npm install @sentry/cli@2.9.0 --https-proxy=http://pkg.proxy.prod.jp.local:10080/
4. 检查代理服务器白名单
让运维确认代理服务器允许访问downloads.sentry-cdn.com的443端口,很多http代理默认会拦截https的CONNECT请求,得把这个域名加进白名单。
内容的提问来源于stack exchange,提问作者Rikesh Bhansari
相关产品推荐
相关产品推荐

