2016-07-22 72 views
0

我正在嘗試與我的主機同步碼頭集裝箱的時區。我的主機使用ISM,並且docker容器(使用tomcat映像)默認使用UTC。我讀過,我們要安裝卷共享主機的時區:與碼頭集裝箱共享主機時區

$ docker run -t -i -p 8080:8080 -p 8090:8090 -v /etc/localtime:/etc/localtime:ro tomcat:7.0.69-jre8 /bin/bash 

之後,我可以檢查檢索日期是一樣的主持人:

$ date 
Fri Jul 22 13:53:45 IST 2016 

當我部署我的應用程序,我嘗試更新日期,我可以看到2016年7月22日的日期正在使用我的瀏覽器時區,這與Docker容器正在運行的主機相同。但debbuging應用程序的服務器端我可以看到日期轉換爲UTC時區。這意味着Docker容器並未真正使用我安裝的主機卷。

我錯過了什麼?

另一種方法我試過了,做的工作是更新的時區的泊塢窗容器:

$ dpkg-reconfigure tzdata // Selecting the corresponding options afterwards 

這樣我可以看到在兩個相同的時區:客戶端和服務器端的我的應用程序。

在先進的感謝

+0

這聽起來像你已經列出了與碼頭工人和工作中的應用程序是有問題的零件兩種方式?不確定我們如何調試您的應用程序,因爲我們沒有關於甚至是什麼的任何細節。 – BMitch

+0

我列出了兩種應該可以工作的方法,是的,應用程序似乎是有問題的。該應用程序是我部署到tomcat docker容器中的一個GWT應用程序,我將端口暴露給主機以便能夠訪問應用程序並調試應用程序(您可以在docker命令中看到端口8080和8090)。我懷疑tomcat docker容器提供的jdk正在發生什麼。 – despadina

+0

[如何更改Tomcat 7的服務器時區?](http://stackoverflow.com/questions/28777322/how-to-change-tomcat-7s-server-timezone) – BMitch

回答

1

調試和閱讀有關日期和時間後,我覺得是非常有意義的後端存儲在UTC/GMT的日期和時間,當它保存在該方式是獨立於客戶端的時區DB。因此,將tomcat服務器時區更改爲與主機匹配並不是一個好習慣(這應該不重要)。

我遇到的問題是前端使用日期和時間(UTC/GMT +1),時間設置爲00:00h,當它到達後端時,日期和時間轉換爲UTC /格林尼治標準時間,使它在前一天的23:00。持久層只是存儲錯誤的日期,因爲我們失去了數據(時間),當我們試圖從數據庫中檢索該記錄時,我們將得到沒有時間的前一個日期,因此它不是我們所期望的結果。

我希望我的解釋是有道理的

相關問題