容器内开启时间同步

笔者使用的centos8的环境,容器也是centos8的

在centos8中,没有找到ntpdate的rpm包,网上找了些资料,发现支持chrony,猜测也许是centos8已经不使用ntpdate了,所以本文介绍chrony的使用

 

 

1、安装chrony

使用yum自行安装,本文就不介绍了,

容器内使用yum不方便的话,可将宿主机下的/usr/sbin/chronyd 和 /bin/chronyc 拷贝到容器内,拷贝使用命令docker cp

2、修改配置文件

/etc/chrony.conf 是其默认的配置文件,不过在执行chronyc时可以通过-f命令,指定配置文件

主要是修改紧随server后面的ip,此为时钟源

/etc/chrony.conf的配置参考
[root@localhost ~]# cat /etc/chrony.conf server
server remote-ip iburst key 12324
...
keyfile /etc/chrony.keys
...

3、启动必要的后台进程

`/usr/sbin/chronyd -u root -f /root/etc/chrony.conf`

如果此步骤不执行,可能会遇到 506 Cannot talk to daemon 报错

补充说明三点

a.其实chronyd是一个service服务,不过想在容器里搞service服务台麻烦了,所以直接这样起

b.如果通过service服务起的话,ps 查看到进程,会发现 -u 是 chrony 用户,这里有没有什么说法,笔者没有继续研究

c.如果想和service服务一模一样,可执行两个命令创建用户;

    groupadd chrony

    useradd -g chrony -m chrony

3.2 adjtimex(0x8001) failed : Operation not permitted 错误的解决方法

给容器添加cap_sys_time权限,方法可参考笔者的容器权限之capability

4、查看时钟源是否有效连接

查看时钟源实例
[root@localhost ~]# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.1.120                   3   9   377    27   +140us[ +167us] +/- 1378us

主要是 ^* 192.168.1.120 这里的说明,如果^后面为*号,说明时钟源已经连接上了,如果为?号,则没有连接上

5、执行时钟源同步

chronyc makestep
[root@localhost ~]# chronyc makestep
200 ok

posted @ 2023-01-05 15:41  lynalee  阅读(502)  评论(0编辑  收藏  举报