最近部署了jenkins容器,发现容器时间不对。
于是通过从宿主机cp /etc/localtime到jenkins容器的办法来解决。
docker cp /etc/localtime jenkins:/etc/localtime
复制后容器时间还是没变化,重启容器后也没变化。
再次执行docker cp报错容器没有路径jenkinstest:/var/db/timezone/zoneinfo/Asia
查看了一下容器里确实没这个路径。
一头雾水,复制到/etc/localtime为什么会报错这个路径
后面查看宿主机和容器中的/etc/localtime的详细信息,发现宿主机的/etc/localtime其实是一个软链接,复制到容器相当于只是把软链接复制过去了,所以同步时间失败。
容器的localtime也变成了软链接/var/db/timezone/zoneinfo/Asia。因为容器中没有这个路径,所以再次cp的时候报错。
最后删掉容器中的/etc/localtime,重新复制宿主机里localtime指向的文件复制到容器,时间就正确啦。
网上看复制这个文件也可以同步时间,这里用哪个都可以。前提是容器中的/etc/localtime已经被前面复制成了一个软链接,指向一个不存在的地址。把这个容器的/etc/localtime删掉,再执行复制宿主机的文件过来就可以了
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime