時(shí)區(qū)錯(cuò)誤,使用jdk獲取當(dāng)前時(shí)間慢8個(gè)小時(shí)
查找原因
使用docker exec命令進(jìn)入容器內(nèi)部發(fā)現(xiàn)alpine的時(shí)區(qū)是UTC時(shí)區(qū),
UTC時(shí)區(qū)是GTM0時(shí)區(qū)而北京時(shí)間是GTM+8時(shí)區(qū),所以使用jdk localdatetime跟date獲取到的時(shí)間總慢8個(gè)小時(shí).
知道原因就好辦了,只要將時(shí)間設(shè)置成北京時(shí)間就好了.
解決方法?
1設(shè)置Alpine linux系統(tǒng)時(shí)區(qū) 查找alpine linux的文檔得知可以通過(guò)tzdata包來(lái)設(shè)置時(shí)區(qū),在構(gòu)建docker 鏡像的時(shí)候,DockerFile加上這句話就好了
apk add tzdata && \
? ? cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
? ? echo "Asia/Shanghai" > /etc/timezone && \
? ? apk del tzdata && \
文檔鏈接https://wiki.alpinelinux.org/wiki/Setting_the_timezone
2設(shè)置JVM的系統(tǒng)默認(rèn)時(shí)區(qū)
在啟動(dòng)Docker鏡像的時(shí)候,通過(guò)設(shè)置user.timezone JVM環(huán)境變量來(lái)設(shè)置時(shí)區(qū)
java -jar? -Duser.timezone=Asia/Shanghai app.jar
使用openJdk渲染圖片時(shí)拋出NullPointerException
錯(cuò)誤堆棧如下
java.lang.NullPointerException:null at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)at sun.font.SunFontManager$2.run(SunFontManager.java:431)at java.security.AccessController.doPrivileged(NativeMethod)at sun.font.SunFontManager.<init>(SunFontManager.java:376)at sun.awt.FcFontManager.<init>(FcFontManager.java:35)at sun.awt.X11FontManager.<init>(X11FontManager.java:57)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at java.lang.Class.newInstance(Class.java:442)at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)at java.security.AccessController.doPrivileged(NativeMethod)at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)at java.awt.Font.getFont2D(Font.java:491)at java.awt.Font.access$000(Font.java:224)at java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)
在容器化的alpine沒(méi)用相關(guān)font資源,通過(guò)安裝ttf-dejavu包可以解決這個(gè)問(wèn)題
FROM java:8-alpineRUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositoriesRUN apk --update add curl bash ttf-dejavu && \
? ? ? rm -rf /var/cache/apk/*
使用此Dockerfile重新build一個(gè)java鏡像即可