我正在设置域注册表,如下所述:
https://docs.docker.com/registry/deploying/
我为docker.mydomain.com生成了证书,并在我的服务器上使用他们的命令启动了docker:
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
我已经启动了docker并指向了使用letsencrypt(https://letsencrypt.org/)获得的证书。
现在,当我浏览https://docker.mydomain.com:5000/v2/时,我会得到一个只有'{}'的页面,带有绿色锁定(成功的安全页面请求)。
但是当我尝试从其他服务器执行docker login docker.mydomain.com:5000
时,我在注册表泊坞窗中看到错误:
TLS handshake error from xxx.xxx.xxx.xxx:51773: remote error: bad certificate
我在设置证书时尝试了一些不同的变体,并得到了如下错误:
remote error: unknown certificate authority
和
tls: first record does not look like a TLS handshake
我错过了什么?
答案 0 :(得分:5)
Docker接缝不支持SNI:https://github.com/docker/docker/issues/9969
更新:Docker现在应该支持SNI。
这意味着,在tls事务期间连接到服务器时,docker客户端不会指定域名,因此您的服务器会显示默认证书。
解决方案可能是将服务器的默认证书更改为对Docker域有效的证书。
此网站仅适用于支持SNI的浏览器。
要检查您的(子)域是否适用于不支持SNI的客户端,您可以使用ssllabs.com/ssltest:如果您没有看到该消息,"此站点仅适用于支持SNI的浏览器。 "然后它会起作用。