本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

的多功能实现。它可以将系统时钟与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位
拉取并运行——就是这么简单。
# 从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+版本。
# 运行NTP服务 $> docker compose up -d ntp # (可选)查看NTP日志 $> docker compose logs ntp
(以下说明假设您已拥有Swarm集群)
# 将NTP栈部署到Swarm $> docker stack deploy -c docker-compose.yml chronyd # 检查服务是否运行 $> docker stack services chronyd # (可选)查看NTP日志 $> docker service logs -f chronyd-ntp
使用本Git仓库中的vars文件,您可以更新任何变量以反映您的环境。更新后,只需执行构建和运行脚本即可。
# 构建NTP镜像 $> ./build.sh # 运行NTP服务 $> ./run.sh
默认情况下,本容器使用NTP池的时间服务器。如果您想使用一个或多个不同的NTP服务器,可以通过NTP_SERVERS环境变量传递给容器。这可以通过更新vars、docker-compose.yml文件或手动向docker run传递--env=NTP_SERVERS="..."实现。
以下是配置常见NTP服务器的示例。请注意,配置多个服务器时,必须使用逗号分隔的列表,且不能包含空格。
# (默认)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中,如果您位于加拿大温哥华,配置如下:
... environment: - TZ=America/Vancouver ...
如果您配置的所有NTP_SERVERS都支持NTS(网络时间安全),可以传递ENABLE_NTS=true选项给容器以启用它。例如,在docker-compose.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权限,且容器运行时允许该访问:
... cap_add: - SYS_TIME environment: - ENABLE_SYSCLK=true ...
在任何安装了ntpdate的机器上,您可以使用以下命令查询新的NTP容器:
$> ntpdate -q <DOCKER_HOST_IP>
以下是我的环境中的示例输出:
$> 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
如果看到以下消息,可能是时钟尚未同步。稍等片刻后再次查询,该消息应消失:
$> 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主机上运行以下命令:
$> 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源状态:
$> 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源的测量统计信息:
$> 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429