Date
Docker 容器時間和時區(不會反映更改)
Docker 容器從哪裡獲取時間資訊?我從基本的 ubuntu:trusty 映像創建了一些容器,當我執行它並請求“日期”時,我得到了 UTC 時間。
有一段時間我通過在我的 Dockerfile 中執行以下操作來解決這個問題:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
但是,由於某種原因停止工作。在網上搜尋我看到以下建議:
docker run -v /etc/timezone:/etc/timezone [image-name]
這兩種方法都正確設置了時區!
$ cat /etc/timezone America/Los_Angeles $ date Tue Apr 14 23:46:51 UTC 2015
有誰知道給了什麼?
這裡的秘密是
dpkg-reconfigure tzdata
簡單地創建/etc/localtime
一個副本、硬連結或符號連結(首選符號連結)到/usr/share/zoneinfo
. 因此,可以完全從您的 Dockerfile 執行此操作。考慮:ENV TZ=America/Los_Angeles RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
作為獎勵,TZ 也將在容器中正確設置。
這也與發行版無關,因此它幾乎適用於任何 Linux。
注意:如果您使用的是基於 alpine 的映像,則必須安裝第
tzdata
一個。(在這裡看到這個問題)看起來像這樣:
RUN apk add --no-cache tzdata ENV TZ America/Los_Angeles