容器内开启时间同步
笔者使用的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