的多功能实现。它可以将系统时钟与NTP服务器、参考时钟(如GPS接收器)同步,也可通过手表和键盘手动输入同步。同时,它还能作为NTPv4(RFC 5905)服务器和对等节点,为网络中的其他计算机提供时间服务。
本Docker容器***支持的架构。直接从Docker Hub拉取容器即可获取适用于您架构的正确镜像。
!Linux x86-64 !ARMv8 64位 !IBM POWER8 !IBM Z Systems !Linux x86/i686 !ARMv7 32位 !ARMv6 32位
拉取并运行——就是这么简单。
bash# 从Docker Hub拉取镜像 $> docker pull 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容器拉取时间即可。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429