美文网首页
使用alpine openjdk8 docker镜像常见问题

使用alpine openjdk8 docker镜像常见问题

作者: 69c826ce28d8 | 来源:发表于2019-05-21 11:49 被阅读0次

    时区错误,使用jdk获取当前时间慢8个小时

    查找原因

    2019-05-21 11-18-55屏幕截图.png

    使用docker exec命令进入容器内部发现alpine的时区是UTC时区,UTC时区是GTM0时区而北京时间是GTM+8时区,所以使用jdk localdatetime跟date获取到的时间总慢8个小时.
    知道原因就好办了,只要将时间设置成北京时间就好了.
    解决方法
    1设置Alpine linux系统时区
    查找alpine linux的文档得知可以通过tzdata包来设置时区,在构建docker 镜像的时候,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设置JVM的系统默认时区
    在启动Docker镜像的时候,通过设置user.timezone JVM环境变量来设置时区
    我是这么做的

    java -jar  -Duser.timezone=Asia/Shanghai app.jar
    

    使用openJdk渲染图片时抛出NullPointerException

    错误堆栈如下

    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(Native Method)
        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(Native Method)
        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(Native Method)
        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)
    

    查找原因

    搜索镜像github的issue发现了一个相关issue https://github.com/docker-library/openjdk/issues/73
    用蹩脚的英语慢慢阅读发现了原因,

    2019-05-21 11-46-25屏幕截图.png
    在容器化的alpine没用相关font资源,通过安装ttf-dejavu包可以解决这个问题

    相关文章

      网友评论

          本文标题:使用alpine openjdk8 docker镜像常见问题

          本文链接:https://www.haomeiwen.com/subject/snedzqtx.html