Date

Docker 容器時間和時區(不會反映更改)

  • August 25, 2021

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

引用自:https://serverfault.com/questions/683605