預設情況下的docker容器啟動之後,系統時間是utc時間,這導致和我們的北京時間相差8小時,會引出很多問題。
有一些容器是和專案一起構建的,我們可以在構建的時候,將系統時區修改為asia/shanghai。如下所示,我們在定義dockerfile的時候,可以直接加上這段指令:
run ln -sf /usr/share/zoneinfo/asia/shanghai /etc/localtime; \
echo 'asia/shanghai' >/etc/timezone;
這樣的話,容器構建之後,再啟動,就不會有時差問題了。
有時候,我們的容器是三方提供的,比如elasticsearch服務,mysql服務,mongodb服務等等。可能有的映象在製作的時候,考慮了時差問題,但是大多數可能並不會考慮。這就需要我們設定時區了,當然,不可能在容器啟動之後去設定,這樣可以改變系統時間,但是如果服務隨著容器啟動,服務的時間並不會隨著系統時間改變而發生變化。所以,我們改變系統時區就應該在服務啟動之前,或者在容器啟動時指定。
改變時區,主要是改變/etc/localtime這個檔案。
確保docker host主機的時間是準確的,可以考慮直接掛載/etc/localtime到宿主機的/etc/localtime,所以我們看到很多這樣的設定:
如果是docker run啟動容器,那麼會指定-v /etc/localtime:/etc/localtime;
如果是docker-compose編排容器,那麼會指定:
volumes:
- /etc/localtime:/etc/localtime
當然,通過這種方式肯定是可以確保時區一致的問題。另外,我根據一些資料,發現可以通過指定環境變數tz="asia/shanghai"的方式來修改時區,比如elasticsearch服務就可以生效。但是busybox就怎麼都不生效,只有通過改變/etc/localtime才行。 docker容器時區問題
軟體開發經常遇到時區問題,國際化應用要處理的時區更為複雜一些,本文講述docker容器時區設定。當服務容器返回的時間都是少8小時,說明就是容器的時區設定出現問題。一般解決此類問題要麼設定一下容器的時區,要麼就是讓容器繼承宿主主機的時區,顯然繼承宿主主機的時區更好 可能說的有些絕對了 我們可以通過調整...
Docker容器的時區設定
docker作為一款優秀的開源容器管理工具,能夠幫助開發者一鍵式地在各個平台上執行自己的應用而無需考慮環境相容問題,已經成為目前主流的應用部署方案。在使用docker容器時,可能碰到的乙個問題是時區的設定,因為docker容器內預設的時區是utc,這一點可以通過date命令來驗證。分別在宿主機和do...
Docker 容器時區錯誤問題
容器缺省會使用 utc 時區 universal time coordinated 通用協調時,即格林尼治時間 如 docker exec 2ec7378b902a date thu sep 12 06 13 43 utc 2019 date 2019年 09月 12日 星期四 14 13 46 c...