
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://img.shields.io/docker/pulls/simonrupf/chronyd.svg?logo=docker&label=pulls&style=for-the-badge&color=0099ff&logoColor=ffffff](https://hub.docker.com/r/simonrupf/chronyd/) https://img.shields.io/docker/stars/simonrupf/chronyd.svg?logo=docker&label=stars&style=for-the-badge&color=0099ff&logoColor=ffffff](https://hub.docker.com/r/simonrupf/chronyd/) https://img.shields.io/github/stars/simonrupf/docker-chronyd.svg?logo=github&label=stars&style=for-the-badge&color=0099ff&logoColor=ffffff](https://github.com/simonrupf/docker-chronyd) https://img.shields.io/badge/license-Apache-blue.svg?logo=apache&style=for-the-badge&color=0099ff&logoColor=ffffff](https://raw.githubusercontent.com/simonrupf/docker-chronyd/master/LICENSE)
本容器在https://alpinelinux.org/%E4%B8%8A%E8%BF%90%E8%A1%8Cchrony%E3%80%82
chrony是网络时间协议(NTP)的多功能实现。它可以将系统时钟与NTP服务器、参考时钟(如GPS接收器)同步,也可通过手表和键盘手动输入同步。同时,它还能作为NTPv4(RFC 5905)服务器和对等节点,为网络中的其他计算机提供时间服务。
本Docker容器官方支持的架构。直接从https://hub.docker.com/r/simonrupf/chronyd/%E6%8B%89%E5%8F%96%E5%AE%B9%E5%99%A8%E5%8D%B3%E5%8F%AF%E8%8E%B7%E5%8F%96%E9%80%82%E7%94%A8%E4%BA%8E%E6%82%A8%E6%9E%B6%E6%9E%84%E7%9A%84%E6%AD%A3%E7%A1%AE%E9%95%9C%E5%83%8F%E3%80%82
!https://img.shields.io/badge/linux/amd64-green?style=flat-square !https://img.shields.io/badge/linux/arm64-green?style=flat-square !https://img.shields.io/badge/linux/ppc64le-green?style=flat-square !https://img.shields.io/badge/linux/s390x-green?style=flat-square !https://img.shields.io/badge/linux/386-green?style=flat-square !https://img.shields.io/badge/linux/arm/v7-green?style=flat-square !https://img.shields.io/badge/linux/arm/v6-green?style=flat-square
拉取并运行——就是这么简单。
bash# 从Docker Hub拉取镜像 $> docker pull docker.xuanyuan.run/simonrupf/chronyd # 运行NTP服务 $> docker run --name=ntp \ --restart=always \ --detach \ --publish=123:123/udp \ simonrupf/chronyd # 或使用更高安全性运行NTP服务 $> docker run --name=ntp \ --restart=always \ --detach \ --publish=123:123/udp \ --read-only \ --tmpfs=/etc/chrony:rw,mode=1750 \ --tmpfs=/run/chrony:rw,mode=1750 \ --tmpfs=/var/lib/chrony:rw,mode=1750 \ simonrupf/chronyd
使用本Git仓库中包含的docker-compose.yml文件,您可以自行构建容器(如果需要)。
注意:此docker-compose文件使用3.9格式,需要Docker Engine 19.03.0+版本。
bash# 运行NTP服务 $> docker compose up -d ntp # (可选)查看NTP日志 $> docker compose logs ntp
(以下说明假设您已拥有Swarm集群)
bash# 将NTP栈部署到Swarm $> docker stack deploy -c docker-compose.yml chronyd # 检查服务是否运行 $> docker stack services chronyd # (可选)查看NTP日志 $> docker service logs -f chronyd-ntp
使用本Git仓库中的vars文件,您可以更新任何变量以反映您的环境。更新后,只需执行构建和运行脚本即可。
bash# 构建NTP镜像 $> ./build.sh # 运行NTP服务 $> ./run.sh
默认情况下,本容器使用NTP池的时间服务器。如果您想使用一个或多个不同的NTP服务器,可以通过NTP_SERVERS环境变量传递给容器。这可以通过更新vars、docker-compose.yml文件或手动向docker run传递--env=NTP_SERVERS="..."实现。
以下是配置常见NTP服务器的示例。请注意,配置多个服务器时,必须使用逗号分隔的列表,且不能包含空格。
bash# (默认)NTP池 NTP_SERVERS="0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org,3.pool.ntp.org" # Cloudflare NTP_SERVERS="time.cloudflare.com" # Google NTP_SERVERS="time1.google.com,time2.google.com,time3.google.com,time4.google.com" # 阿里云 NTP_SERVERS="ntp1.aliyun.com,ntp2.aliyun.com,ntp3.aliyun.com,ntp4.aliyun.com" # 本地(离线) NTP_SERVERS="127.127.1.1"
如果您需要公共的一级(stratum 1)服务器列表,可以查看以下链接。请注意验证服务器是否活跃,因为该列表中可能包含一些不再活跃的服务器。
此选项为可选,默认未启用。如果提供NOCLIENTLOG=true环境变量,chrony将配置为:
指定不记录客户端访问。默认情况下会记录客户端访问,允许使用chronyc中的clients命令报告统计信息。此选项也会有效禁用服务器对NTP交错模式的支持。
默认情况下,本项目将信息性消息记录到stdout,这在运行NTP服务时很有帮助。如果您想更改日志详细级别,可以在首次启动容器时传递LOG_LEVEL环境变量,指定级别(#)。此选项对应chrony的-L选项,支持以下级别:0(信息)、1(警告)、2(非致命错误)和3(致命错误)。
有关更多信息,请查看项目文档:
默认使用UTC时区,但如果您想将NTP服务器调整为本地时区,只需提供TZ环境变量,遵循标准TZ数据格式。例如,在docker-compose.yaml中,如果您位于加拿大温哥华,配置如下:
yaml... environment: - TZ=America/Vancouver ...
如果您配置的所有NTP_SERVERS都支持NTS(网络时间安全),可以传递ENABLE_NTS=true选项给容器以启用它。例如,在docker-compose.yaml中,配置如下:
yaml... environment: - NTP_SERVER=time.cloudflare.com - ENABLE_NTS=true ...
如果您配置的任何NTP_SERVERS不支持NTS,启动时会看到类似以下消息:
NTS-KE session with 164.67.62.194:4460 (tick.ucla.edu) timed out
此选项允许控制系统时钟。
默认情况下,chronyd不会尝试调整时钟。它假设时钟自由运行,并仍会跟踪其相对于估计真实时间的偏移和频率。这允许chronyd在没有调整或设置系统时钟能力的情况下作为NTP服务器运行。
启用控制需要授予SYS_TIME权限,且容器运行时允许该访问:
yaml... cap_add: - SYS_TIME environment: - ENABLE_SYSCLK=true ...
在任何安装了ntpdate的机器上,您可以使用以下命令查询新的NTP容器:
bash$> ntpdate -q <DOCKER_HOST_IP>
以下是我的环境中的示例输出:
bash$> ntpdate -q 10.13.13.9 server 10.13.1.109, stratum 4, offset 0.000642, delay 0.02805 14 Mar 19:21:29 ntpdate[26834]: adjust time server 10.13.13.109 offset 0.000642 sec
如果看到以下消息,可能是时钟尚未同步。稍等片刻后再次查询,该消息应消失:
bash$> ntpdate -q 10.13.13.9 server 10.13.13.9, stratum 16, offset 0.005689, delay 0.02837 11 Dec 09:47:53 ntpdate[26030]: no server suitable for synchronization found
要查看容器的NTP状态,可在Docker主机上运行以下命令:
bash$> docker exec ntp chronyc tracking Reference ID : D8EF2300 (time1.google.com) Stratum : 2 Ref time (UTC) : Sun Mar 15 04:33:30 2020 System time : 0.000054161 seconds slow of NTP time Last offset : -0.000015060 seconds RMS offset : 0.000206534 seconds Frequency : 5.626 ppm fast Residual freq : -0.001 ppm Skew : 0.118 ppm Root delay : 0.022015510 seconds Root dispersion : 0.001476757 seconds Update interval : 1025.2 seconds Leap status : Normal
以下命令可查看对等列表,验证每个配置的NTP源状态:
bash$> docker exec ntp chronyc sources 210 Number of sources = 2 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ time.cloudflare.com 3 10 377 404 -623us[ -623us] +/- 24ms ^* time1.google.com 1 10 377 1023 +259us[ +244us] +/- 11ms
最后,如果想查看每个配置的NTP源的测量统计信息:
bash$> docker exec ntp chronyc sourcestats 210 Number of sources = 2 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ============================================================================== time.cloudflare.com 35 18 139m +0.014 0.141 -662us 530us time1.google.com 33 13 128m -0.007 0.138 +318us 460us
如果看到类似以下消息,想知道原因:
$ docker logs -f ntps [...] 2021-05-25T18:41:40Z System clock wrong by -2.535004 seconds 2021-05-25T18:41:40Z Could not step system clock 2021-05-25T18:42:47Z System clock wrong by -2.541034 seconds 2021-05-25T18:42:47Z Could not step system clock
原因是:chronyd运行时带有-x标志,不会尝试控制系统(容器主机)时钟。这是必要的,因为该进程没有修改系统时钟的权限(出于安全考虑)。
与网络中的任何主机一样,只需使用您偏好的NTP客户端从容器主机上运行的NTP容器拉取时间即可。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务