
我建立了一個 docker 容器,它在錯誤的時區運行。我個人需要它在我的時區(歐洲/斯德哥爾摩,GMT+1)運行。由於該專案是開源的,其他用戶可能也希望更改它。我希望讓任何人都可以輕鬆地在 Dockerfile 或 docker-compose.yml 中更改此設定。
如果可能的話,我還希望該解決方案不僅適用於 CentOS,以防有人希望使用不同的發行版。
在我的 docker 容器中設定本地時間/時區的最與發行版無關的方法是什麼?
這兩種方法似乎很常見,但我不確定它們是否真的是我最好的方法:
TZ環境變數
一些 Linux 發行版讀取 TZ 環境變數。但是,我注意到當我使用圖像時它不起作用centos:7
。
/etc/當地時間
您可以在 docker-compose.yml 中將容器對應/etc/localtime
到/etc/localtime
主機上。但這樣做時,使用的發行版/etc/timezone
會保留 UTC,並且可能正在讀取的軟體會讀取錯誤的時區。
答案1
與發行版無關的需要一個腳本來偵測正在使用哪個發行版。這是因為每個發行版「系列」都有不同的時區標記方式。對於某些人來說,將以下內容新增至 Dockerfile 可能會起作用:
RUN echo "歐洲/斯德哥爾摩" > /etc/timezone
其他(例如 Debian)則需要使用上述命令,然後使用另一個 Dockerfile 命令,例如:
運行 運行 sudo dpkg-reconfigure -f 非互動式 tzdata
其他發行版(IIRC,包括 CentOS)則需要類似:
執行 ln -s /usr/share/zoneinfo/Europe/Stockhom /etc/localtime
使其與發行版無關需要研究每個發行版重新配置時區的方法。如果您查看 /etc/localtime,您會發現它不是一個文字檔案。