Docker Swarm:来自守护程序的错误响应:验证根 CA 证书时出错:x509:证书已过期或尚未生效
Docker Swarm: Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid
OS: 美分OS 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 给我这个错误。这个错误的原因是什么,它来自哪里?
问候
阿迪亚
有类似的问题,因为 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
...
...
...
...
您可以看到有效期范围是格林威治标准时间 10 月 24 日 20:25:00 2018 年至格林威治标准时间 10 月 19 日 20:25:00 2038 年。如果尝试加入 swarm 的机器在该间隔内没有时钟,它将因该错误而失败。
我通过在两台机器上设置相同的日期解决了这个问题。
简单地删除证书并重新启动服务对我有用。
当您的节点中的时间不同步时会产生此错误。
在初始群之后
docker swarm init
您可以使用以下命令查看 swarm 证书的限制时间
docker swarm ca | openssl x509 -noout -text
你的节点时间必须在
之间
有效期
不早于:2 月 20 日 10:21:00 2019 GMT
不晚于:2 月 15 日 10:21:00 2039 GMT
并且在linux中设置节点时间可以使用'timedatectl'命令
自动同步时间,可以在每个节点使用follow命令
timedatectl set-timezone asia/Tehran
timedatectl set-ntp on
并且您可以使用
显示所有时区
timedatectl list-timezones
确实,docker 个节点 运行:
的 VM 之间的日期和时间不同步
以下命令帮助我解决了这个问题:
systemctl stop ntpd ; ntpdate *server* ; systemctl start ntpd
作为docs状态:
ntpdate sets the local date and time by polling the Network Time
Protocol (NTP) server(s) given as the server arguments to determine
the correct time
我做了以下及其对我的工作
更改时区(GMT可根据控制节点中的时区进行更改):
timedatectl 设置时区 GMT
更改节点机器中日期的格式
日期 --set "2021-12-21 星期二 17:18:07 GMT"
提示:通过运行此命令
从swarm master节点获取日期格式
docker swarm ca | openssl x509 -noout -text | grep "Not Before"
OS: 美分OS 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 给我这个错误。这个错误的原因是什么,它来自哪里?
问候 阿迪亚
有类似的问题,因为 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
...
...
...
...
您可以看到有效期范围是格林威治标准时间 10 月 24 日 20:25:00 2018 年至格林威治标准时间 10 月 19 日 20:25:00 2038 年。如果尝试加入 swarm 的机器在该间隔内没有时钟,它将因该错误而失败。
我通过在两台机器上设置相同的日期解决了这个问题。
简单地删除证书并重新启动服务对我有用。
当您的节点中的时间不同步时会产生此错误。 在初始群之后
docker swarm init
您可以使用以下命令查看 swarm 证书的限制时间
docker swarm ca | openssl x509 -noout -text
你的节点时间必须在
之间有效期
不早于:2 月 20 日 10:21:00 2019 GMT
不晚于:2 月 15 日 10:21:00 2039 GMT
并且在linux中设置节点时间可以使用'timedatectl'命令
自动同步时间,可以在每个节点使用follow命令
timedatectl set-timezone asia/Tehran
timedatectl set-ntp on
并且您可以使用
显示所有时区timedatectl list-timezones
确实,docker 个节点 运行:
的 VM 之间的日期和时间不同步以下命令帮助我解决了这个问题:
systemctl stop ntpd ; ntpdate *server* ; systemctl start ntpd
作为docs状态:
ntpdate sets the local date and time by polling the Network Time Protocol (NTP) server(s) given as the server arguments to determine the correct time
我做了以下及其对我的工作
更改时区(GMT可根据控制节点中的时区进行更改):
timedatectl 设置时区 GMT
更改节点机器中日期的格式
日期 --set "2021-12-21 星期二 17:18:07 GMT"
提示:通过运行此命令
从swarm master节点获取日期格式docker swarm ca | openssl x509 -noout -text | grep "Not Before"