docker容器內需要做時間同步麼?

問題描述

Docker容器創建好之後,發現容器時間跟宿主機時間不一致,容器是UTC時間,宿主機是北京時間。 這個問題在Dockerfile中添加

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

可以解決。 接着又想是不是要加一個ntp服務來同步時間呢? 於是進到容器裏執行命令並遇到以下報錯

sh-4.2# systemctl start ntpd
Failed to get D-Bus connection: Operation not permitted

問題分析

Docker的設計理念是在容器裏面不運行後臺服務,容器本身就是宿主機上的一個獨立的主進程, 也可以間接的理解爲就是容器裏運行服務的應用進程。 一個容器的生命週期是圍繞這個主進程存在的,所以正確的使用容器方法是將裏面的服務運行在前臺。 再說到systemd,這個套件已經成爲主流Linux發行版(比如CentOS7、Ubuntu14+)默認的服務管理, 取代了傳統的SystemV風格服務管理。systemd維護系統服務程序,它需要特權去會訪問Linux內核。 而容器並不是一個完整的操作系統,只有一個文件系統, 而且默認啓動只是普通用戶這樣的權限訪問Linux內核,也就是沒有特權,所以自然就用不了! 因此,請遵守容器設計原則,一個容器裏運行一個前臺服務!

場景測試

初始狀態下,可以看到容器內時間和宿主機時間一致。

在宿主機上修改時間後,可以看到容器內的時間也是同步修改的。

執行ntpdate重新校準宿主機時間後,容器內的時間也得到了校準。

結論

docker容器內不需要做時間同步,只需要設置時區就可以。不需要另外再校準時間。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章