1. 程式人生 > >Docker踩坑日記之修改容器時區

Docker踩坑日記之修改容器時區

想必剛接觸Docker的同學直接run各種容器玩耍,或許直接投入使用,久而久之,就會發現資料庫的時間與我們現在時間整整差8個小時。為什麼會差8個小時,因為官方容器預設是UTF時區,我們這裡是差8個時區,也就是UTF8。

如何修改

修改應用或者資料庫時間(不推薦,治標不治本,直接省略)

容器內修改 (不推薦,重啟容器就無效,直接省略)

Run階段掛載宿主機localtime

docker run -d -v /etc/localtime:/etc/localtime java

這種方式可以解決重啟而不丟失時區問題,但是暴露多了一個掛載點,而且每次run都要記得加上這個。思考著能不能在映象上解決,答案是可以的。

Dockfile新增時區

RUN echo "Asia/Shanghai" > /etc/timezone \
&& dpkg-reconfigure -f noninteractive tzdata

這種方式就不用多一個掛載點,在容器內修改。但是但是,也是有問題的。有一些基礎映象是建立不了的,比如官方mysql映象。

Dockerfile定義環境變數

ENV TZ=Asia/Shanghai

究極終結版,可以規避上面所有問題。在Dockfile新增一個時區的環境變數,每次啟動容器就會讀取,改變失去,非常炫酷。

services:
  nginx:
    build: .
    environment:
      TZ: Asia/Shanghai

在DockerCompose裡可以這樣操作。

推薦最後一種,一行永逸~

不足之處,多多指教,謝謝大家~