' npm ERR!自签名证书'在作为docker build

时间:2017-09-14 16:32:17

标签: docker npm npm-install

我有一个Dockerfile,我在其中运行npm install

... 运行npm安装 ....

以下内容出错:

npm ERR! Linux 4.4.0-92-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v7.10.1
npm ERR! npm  v4.2.0
npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT
npm ERR! self signed certificate

在同一台计算机上直接运行npm install时,我没有遇到此问题。 (即当我运行它时,它不是docker build的一部分)。所以我不相信这个问题与任何http代理有关。

@Tarun,

这是curl -v https://docker.com

的输出

---- *使用TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256进行SSL连接

  • 服务器证书验证确定

  • 服务器证书状态验证SKIPPED

  • 通用名称:* .docker.com(匹配)

  • 服务器证书到期日期确定

  • 服务器证书激活日期确定

  • 证书公钥:RSA

  • 证书版本:#3

  • 主题:CN = * .docker.com

  • 开始日期:2017年8月11日星期五00:00:00 GMT

  • 过期日期:2018年9月11日星期二,格林威治标准时间12:00:00

  • 发行人:C = US,O =亚马逊,OU =服务器CA 1B,CN =亚马逊

  • 压缩:NULL

  • ALPN,服务器不同意协议

  

GET / HTTP / 1.1

     

主持人:docker.com

     

User-Agent:curl / 7.47.0

这是来自盒子上的docker容器内的curl命令。

root @ 2145cd2e9997:/ app / c3po #curl -v https://docker.com

  • 重建网址:https://docker.com/

  • 在DNS缓存中找不到主机名

  • 尝试52.55.168.191 ...

  • 连接到docker.com(52.55.168.191)端口443(#0)

  • 成功设置证书验证位置:

  • CAfile:none

    CApath:/ etc / ssl / certs

  • SSLv3,TLS握手,客户问候(1):

  • SSLv3,TLS握手,服务器问候(2):

  • SSLv3,TLS握手,CERT(11):

  • SSLv3,TLS警报,服务器问候(2):

  • SSL证书问题:自签名证书

  • 关闭连接0

  • SSLv3,TLS警报,客户问候(1):

卷曲:(60)SSL证书问题:自签名证书

此处有更多详情:http://curl.haxx.se/docs/sslcerts.html

curl默认使用"捆绑"执行SSL证书验证。  证书颁发机构(CA)公钥(CA证书)。如果是默认值  捆绑文件不够用,您可以指定备用文件  使用--cacert选项。

如果此HTTPS服务器使用由CA表示的CA签名的证书  捆绑,证书验证可能由于a而失败  证书问题(可能已过期,或名称可能已过期)  与网址中的域名不匹配。)

如果您想关闭curl对证书的验证,请使用  -k(或--insecure)选项。

2 个答案:

答案 0 :(得分:0)

我想出来了。我在docker主机上运行jenkins,我正在使用iptables将端口443转发到8080.这与docker自己的iptable规则相冲突,这导致了我自己签署的所有问题。

此stackoverflow帖子帮助我确定了问题:SSL certificate verification fails inside docker container on specific server

答案 1 :(得分:0)

如果您正在从Dockerfile运行一些npm命令,那么可以在运行npm命令之前添加它:

RUN npm config set strict-ssl false
RUN npm install

注意:建议将公司的根证书(如果位于公司防火墙后)复制到容器中,而不要完全禁用SSL。