4

操作系统:CentOS 7 虚拟机

码头工人最新版本

执行的命令:

   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 给了我这个错误。这个错误的原因是什么,它来自哪里?

问候阿迪亚

4

6 回答 6

9

有类似的问题,因为 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 GMT 和 10 月 19 日 20:25:00 2038 GMT 之间。如果尝试加入 swarm 的机器在该时间间隔内没有时钟,它将因该错误而失败。

于 2017-09-05T12:09:04.650 回答
3

当您的节点中的时间不同步时会生成此错误。在最初的群体之后

docker swarm init

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

docker swarm ca | openssl x509 -noout -text

您的节点时间必须介于

有效期
不早于:2019 年 2 月 20 日 10:21:00 GMT
不晚于:2039 年 2 月 15 日 10:21:00 GMT

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

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

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

你可以显示所有时区

timedatectl list-timezones
于 2019-02-20T10:45:50.093 回答
1

只需删除证书并重新启动服务对我有用。

于 2018-10-18T07:14:22.280 回答
0

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

于 2018-08-25T02:12:31.823 回答
0

事实上,运行 docker 节点的虚拟机之间的日期和时间并不同步:

以下命令帮助我克服了这个问题:

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

正如文档所述

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

于 2020-02-12T12:06:57.213 回答
0

我为我做了以下及其工作

  • 更改时区(可以根据控制节点中的时区更改GMT):

    timedatectl 设置时区 GMT

  • 更改节点机器中日期的格式

    日期——设置“格林威治标准时间 2021 年 12 月 21 日星期二 17:18:07”

提示:通过运行此命令从 swarm 主节点获取日期格式

docker swarm ca | openssl x509 -noout -text | grep "Not Before"
于 2021-12-21T08:22:54.063 回答