Windows11下Docker-Compose中Elasticsearch容器时间同步问题
解决Windows11下Docker-Compose中Elasticsearch容器与本地时间同步问题
针对你遇到的Elasticsearch容器时钟回退警告(absolute clock went backwards by [636ms/636ms] while timer thread was sleeping),结合Windows11+Docker(WSL2后端)环境,按以下步骤解决:
1. 检查Docker Desktop时间同步配置
- 打开Docker Desktop,进入Settings > Resources > Advanced
- 勾选Sync time with host选项,点击
Apply & Restart重启Docker
2. 修复WSL2后端时间同步(核心解决步骤)
Windows11上Docker默认使用WSL2后端,WSL2在系统休眠后常出现时间滞后,直接导致容器时间不同步:
- 手动临时同步:打开任意WSL终端(如Ubuntu),执行命令:
sudo hwclock -s - 自动永久同步:
- 在WSL中创建定时同步脚本:
sudo nano /etc/cron.hourly/wsl-time-sync - 写入以下内容并保存:
#!/bin/bash hwclock -s - 赋予脚本执行权限:
sudo chmod +x /etc/cron.hourly/wsl-time-sync
wsl sudo hwclock -s,无需手动操作WSL。 - 在WSL中创建定时同步脚本:
3. 简化Elasticsearch的Docker-Compose配置
你之前手动安装tzdata的操作冗余,官方Elasticsearch镜像已支持TZ环境变量直接设置时区,无需root权限和自定义command:
elasticsearch: image: elasticsearch:8.10.2 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - TZ=Europe/Moscow - ES_JAVA_OPTS=-Xms512m -Xmx512m ports: - '9200:9200' - '9300:9300' volumes: - es-data:/usr/share/elasticsearch/data
4. 验证时间同步效果
进入Elasticsearch容器执行date命令,对比本地Windows系统时间(注意Europe/Moscow为UTC+3时区):
docker exec -it elasticsearch date
确认时间一致后,重启Elasticsearch容器,检查日志是否仍有时钟回退警告。
内容的提问来源于stack exchange,提问作者Aliterego
相关产品推荐
相关产品推荐

