Docker容器時區和語言設置問題集合

在使用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 指定時區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章