[Docker]在Container內設定時區

[Docker]在Container內設定時區

今天遇到小小的問題,因為資料庫的時區設定是UTC,所以程式透過SQL Function取到時間都是UTC

若需要改成其他時區的話,只改主機vm的時區是無效的(CentOS6,7改時區的步驟:連結)

因為這個誤區,難怪怎麼重啟Docker的Container都無效

 

Docker更改時區步驟如下:

我們可以先查詢時區的清單

# timedatectl list-timezones
##*** 過濾出所有Asia開頭的項目
# timedatectl list-timezones | grep Asia

先連到Docker的Container中

sudo docker exec -it bin/bash

再來輸入以下命令

echo “Asia/Taipei” > /etc/timezone

dpkg-reconfigure -f noninteractive tzdata

console上會有如下的輸出

Current default time zone: 'Asia/Taipei'
Local time is now:      Tue Jul 25 12:12:27 CST 2017.
Universal Time is now:  Tue Jul 25 04:12:27 UTC 2017.

這時的local time已經變成+8:00,還有顯示CST-China Standard Time,這代表時區已修改完成了。

 

根據連結的說法,要加入noninteractive主要是方便未來可以整合到Dockerfile中使用

比如:

RUN echo "Asia/Shanghai" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata

如此一來,就可以把時區設定到Images中而不用每個container運行後都要再進行一次時區設定

最後,將mysql的container restart後,就可以看到sql function取到的時區已經正確

補充一下,若你設定時區後悔了…可以用以下指令,改回你的時區設定:

sudo dpkg-reconfigure tzdata

 

root@61bdd083614d:/# dpkg-reconfigure tzdata
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time
zones in which they are located.

  1. Africa   3. Antarctica  5. Arctic Ocean  7. Atlantic Ocean  9. Indian Ocean    11. System V timezones  13. None of the above
  2. America  4. Australia   6. Asia          8. Europe          10. Pacific Ocean  12. US

Geographic area: 13


Please select the city or region corresponding to your time zone.

  1. GMT    4. GMT+10  7. GMT+2  10. GMT+5  13. GMT+8  16. GMT-1   19. GMT-12  22. GMT-2  25. GMT-5  28. GMT-8  31. Greenwich  34. Universal
  2. GMT+0  5. GMT+11  8. GMT+3  11. GMT+6  14. GMT+9  17. GMT-10  20. GMT-13  23. GMT-3  26. GMT-6  29. GMT-9  32. UCT        35. Zulu
  3. GMT+1  6. GMT+12  9. GMT+4  12. GMT+7  15. GMT-0  18. GMT-11  21. GMT-14  24. GMT-4  27. GMT-7  30. GMT0   33. UTC

Time zone: 33

2 Replies to “[Docker]在Container內設定時區”

  1. 殊不知這個是痛苦的開始…儲存時間資料的時候,還是以UTC時間為好(除非你可以百分之百確認你的用戶或環境都是+8,那麼以+8時間為基準處理就是共識,否則,在每一台機器間、每個解決方案中對時區處理的設定,可能會搞死我們自己…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *