我有一个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)选项。
答案 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。