2016-07-26

設定 Docker Container 與 Host 相同時區的方法

關於 Docker Container 的時區的問題,阿舍從來就沒有想過有這個問題會出現,一直到最近,阿舍要在一個虛擬機器上同時啟動多個 Conatiner 來讀寫同一個資料夾的檔案時才注意到,這個資料夾裡的檔案的時間註記怎麼怪怪的,然後,才想到 ... 阿舍好像沒有把每個 Conatiner 的時區設定成和 Host 一樣哩 !



關於這個問題的解決方法,阿舍的想法很簡單,因為,阿舍的這幾個 Container 的 Image 都是自己 Build 的,所以,阿舍就在 Dockerfile 裡多加上時區的設定就可以搞定了,這個看來不是什麼大問題,不過,後來,阿舍想想,好像不太對,如果阿舍今天用的是別人弄好的 Docker Image 的話,那是不是都要再用 Dockerfile 的方式來自己再包一次 Imgae,這樣會不會太麻煩了哩 ...

嗯 ! 阿舍查了一下,果然,有不少人有跟阿舍一樣的問題,所以,當然就會有更簡單的解決方式哩 ! 解決的方法總共有二種,是在 Docker 用 run 指令啟動 Container 的時候,分別利用下面所列的 -v 選項和 -e 選項來連結檔案或設定環境變數的方式來達成的。


方法一
-v /etc/localtime:/etc/localtime:ro

方法二
-e "TZ=Asia/Taipei"

阿舍是在用 Alpine Linux 包成的 Image 試了上面二種方式,結果,只有第一種方式可行,阿舍查了一下,是因為 Alpine Linux 還需要安裝額外的套件才可使用,但是,阿舍看了網路上的討論,似乎很多人是用第二種方式成功的人比較外哩 ! 所以,如果有需要的話,阿舍建議兩種都給他試一下,然後,再選一種自己喜歡的方式或可以用的方式哩 ...

好,那設定好之後要怎知設定有沒有成功和生效呢 ? 這個的話,就請參考阿舍寫的這一篇來進入這個 Docker Conatiner 的終端畫面來執行 date 指令,這樣就可以看到 Container 裡的時間對不對了哩 ...

另外,阿舍要補充的就是,如果你是用上面的方法一的方式的話,要記得確定你的 Host 是不是在 /etc 下有 localtime 這個檔案,如果沒有的話,那就要改用方法二,而如果不幸都不行,那就只能利用 Dockerfile 來先在 Image 就設定好和 Host 相的時區,不過,當把這個 Image 換到不同時區的 Host 來執行時,就會需要重新 Build Image,可攜性就大大的降低了哩 ...




[+] Ubuntu 指令新手會用到的35個技法 - 這是以阿舍的使用經驗編寫出來的電子書,三天內應該就看的完,學的起來哩 ! 有空就參考一下囉 ! ... ^^=

關於阿舍

好文不藏私,請多分享囉!! ^^=



沒有留言 :

張貼留言

如果留言後,發現留言不見了,這通常是因為 Goolge 把它認為是垃圾留言了,請用信件通知阿舍調整 ( ayubiz@gmail.com )。謝謝 !