在自己建立的 Debian docker image 設定時區

要把打包好的 JavaEE war 放到 jetty image 裡面不難,但後來發現將 image 部署到 GKE 上面後,系統時間是 UTC 時間,得改成台灣的時區(GMT+8)才行。
但問題來了,jetty 的 Debian image 預設使用者是 jetty,而這個使用者並沒有權限去執行這段命令,必須是 root 才行,要怎麼辦呢?

最近建立的服務,是使用 jetty middleware,搭配 jetty 的 docker image,部署在 Google Cloud Platform 的 Kubernetes Engine (簡稱 GKE)上面。

這年頭,還在用 Java 跑 middleware 的人,應該是老古董了吧?(笑)

說實在的,對於 container 架構還不是非常的熟悉,所以遇到問題就只能一個一個來解決。

要把打包好的 JavaEE war 放到 jetty image 裡面不難,但後來發現將 image 部署到 GKE 上面後,系統時間是 UTC 時間,得改成台灣的時區(GMT+8)才行。

要更動 Debian 上面的時區不難,只要執行底下的命令就可以了:

TZ=Asia/Taipei
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

但問題來了,jetty 的 Debian image 預設使用者是 jetty,而這個使用者並沒有權限去執行這段命令,必須是 root 才行,要怎麼辦呢?

嘗試了 su、sudo 都不行,更不要說安裝 sudo(因為也必須要有 root 權限才能做啊!)。

後來才找到,原來在 Dockerfile 裡面可以去切換使用者,例子如下:

USER root
ENV TZ=Asia/Taipei
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

在 Dockerfile 裡面加上這段,包出來的 image 就會是台北時區(GMT+8)囉!

想知道有支援哪些時區?就去看看 /usr/share/zoneinfo 底下有哪些地區與城市,就知道囉!

markkwsu

markkwsu

Add comment