大概率是系统时间不准,需先运行date和timedatectl status确认时间偏移,再按系统版本用ntpdate或chronyd同步,并配置国内ntp源加固,最后用docker pull hello-world验证。
遇到 docker engine 报 x509: certificate has expired 或 not yet valid,大概率不是证书真过期了,而是系统时间不准——docker 在 tls 握手时会严格比对本地时间与证书的 not before 和 not after 字段,偏差几分钟就可能失败。
第一步:快速确认时间是否偏移
别跳过这步,很多问题在这里就能定位:
- 运行
date,看输出日期和当前真实时间是否一致(注意时区,CST 是 UTC+8) - 执行
timedatectl status,重点关注 System clock synchronized 是否为 yes,以及 RTC time 和 Local time 是否接近 - 对比网络时间:
curl -I https://registry-1.docker.io 2>/dev/null | grep Date,把返回的Date头和date -u输出对比,差值不应超过 60 秒
第二步:按系统版本修复时间同步
CentOS/RHEL 7 和 8+ 的默认时间服务不同,命令不能混用:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
CentOS 7 / RHEL 7:先装再强制校准
yum install -y ntpdatentpdate -u ntp.aliyun.comhwclock --systohc -
CentOS 8 / RHEL 8+ / AlmaLinux / Rocky 8+:启用 chronyd 并立即同步
dnf install -y chronysystemctl enable --now chronydchronyc makestep(关键:让 chronyd 立即修正大偏差,不等待平滑调整) -
Ubuntu/Debian:
sudo timedatectl set-ntp on
若仍不准,可临时用:sudo ntpdate -u ntp.aliyun.com
第三步:检查并加固时间服务长期可用性
修完别以为一劳永逸,时间漂移会反复发生:
- 编辑
/etc/chrony.conf(或/etc/ntp.conf),把默认 NTP 源替换成国内稳定源,例如:server ntp.aliyun.com iburstserver ntp1.aliyun.com iburstserver ntp2.aliyun.com iburst - 确保至少配置 3 个不同 NTP 服务器,避免单点故障
- 重启服务后验证:
chronyc sources -v(看到^*表示正在使用的主源)
第四步:验证 Docker 是否恢复正常
时间修好后,不需要重启 Docker daemon,直接测试:
-
docker pull hello-world—— 最轻量验证 - 若仍报错,再检查证书链问题(如私有仓库自签名证书未配置信任),但此时已排除时间因素
- 宿主机时间正确后,新启动的容器默认会继承该时间;已有容器无需操作,除非它自己运行了独立 NTP 服务










