Docker Swarm:来自守护程序的错误响应:验证根CA证书时出错:x509:证书已过期或尚未生效

时间:2017-08-04 09:14:53

标签: docker x509 docker-swarm docker-engine

操作系统:CentOS 7 VM

Docker最新版本

执行的命令:

   1) docker swarm init
   2) docker swarm join --token SWMTKN-1-3iqtmbz55yvhxkahe2ncs7d9ebxzlzmw1pwhqzvmcemiolef63-3muc4qjs3mbvh53t8ktzzmb22 192.168.10.108:2377 
    Error: Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid

正如您所看到的,swarm join正在给我这个错误。这个错误的原因是什么?它来自哪里?

此致 阿迪亚

5 个答案:

答案 0 :(得分:5)

有类似的问题,因为swarm init将来会生成带有开始日期的ca证书。可能是由于ntp滞后。

可以使用以下命令获取CA证书信息:

docker swarm ca | openssl x509 -noout -text

输出看起来像这样:

Certificate:
Data:
    Version: 3 (0x2)
    Serial Number:
        ...
Signature Algorithm: ecdsa-with-SHA256
    Issuer: CN=swarm-ca
    Validity
        Not Before: Oct 24 20:25:00 2018 GMT
        Not After : Oct 19 20:25:00 2038 GMT
    Subject: CN=swarm-ca
    Subject Public Key Info:
        Public Key Algorithm: id-ecPublicKey
            Public-Key: (256 bit)
            pub:
                ...
                ...
                ...
                ...
            ASN1 OID: prime256v1
            NIST CURVE: P-256
    X509v3 extensions:
        X509v3 Key Usage: critical
            Certificate Sign, CRL Sign
        X509v3 Basic Constraints: critical
            CA:TRUE
        X509v3 Subject Key Identifier:
            ...
Signature Algorithm: ecdsa-with-SHA256
     ...
     ...
     ...
     ...

您可以看到有效范围是格林威治标准时间2018年10月24日20:25:00和格林威治标准时间20月20日20:25:00之间。如果尝试加入群组的机器在该时间间隔内没有时钟,则会因该错误而失败。

答案 1 :(得分:0)

我通过在两台计算机上设置相同的日期来解决它。

答案 2 :(得分:0)

只需删除证书,然后重新启动服务就可以为我工作。

答案 3 :(得分:0)

当节点中的时间不同步时,将生成此错误。 最初成群后

docker swarm init

您可以使用以下命令查看群证书的限制时间

docker swarm ca | openssl x509 -noout -text

您的节点时间必须在

之间

有效期
            不早于:Feb 20 10:21:00 2019 GMT
            不迟于:格林尼治标准时间2039年2月15日10:21:00

在Linux中设置节点时间可以使用'timedatectl'命令

对于自动同步时间,您可以在每个节点中使用follow命令

timedatectl set-timezone asia/Tehran
timedatectl set-ntp on

,您可以使用

显示所有时区
timedatectl list-timezones

答案 4 :(得分:0)

实际上,日期和时间未在运行docker节点的VM之间同步:

以下命令帮助我解决了这个问题:

systemctl stop ntpd ;  ntpdate *server* ; systemctl start ntpd

docs状态:

ntpdate通过轮询网络时间来设置本地日期和时间 协议(NTP)服务器作为确定服务器参数的参数 正确的时间