在使用docker情況下因爲docker鏡像上的時區和語言和宿主機不一樣,爲了解決這個問題。首先要了解docker上的鏡像系統,
查看系統命令cat /etc/issue 或cat /etc/redhat-release。
如果和宿主機一樣的系統可以使用 -v參數把時區和語言映射,舉例
docker run -it -p -v /etc/localtime:/etc/ imagesid
也可以使用
docker cp /etc/localtime containerid:/etc/
使用上述方法需要宿主機和docker裏面系統是一致的。
也可以使用自定義DOCKERFILE文件方法
寫法
FROM java:8-jre
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo 'Asia/Shanghai' >/etc/timezone
這對centos和unbuntu沒有問題,其它linux系統寫法有
1、docker run -e TZ=Asia/Shanghai
2、tzselect timeconfig dpkg-reconfigure tzdata
使用Alpine Linux的docker鏡像,那不能在原有鏡像上修改,只能自定義image
修改Dockerfile文件內容
增加安裝tzdata包
#定義環境變量
ENV TIME_ZONE Asiz/Shanghai
#dockerfile增加命令
#安裝tzdata安裝包
&& apk add --no-cache tzdata \
#設置時區
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
最後java程序會遇到日誌裏的時間還是沒有調整過來,這和虛擬機有關
運行java程序時候加入JVM參數 -Duser.timezone=GMT+08 指定時區