zoukankan      html  css  js  c++  java
  • 基于alpine构建jdk镜像遇到的坑

    alpine常用于作为docker的基础镜像,因为它很小,功能精简,基本上没有啥漏洞,记录一下最近用alpine作为基础镜像构建java 8镜像 下面的问题在oracle jdk openjdk都会出现 。

    错误一

    java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
    

      这个错误一般出现在生成验证码绘制的时候,这个错误大概原因就是由于在alpine上太过于精简了,导致初始化FontManagerFactory工厂初始化失败,那么解决办法就是安装glibc
    网上有很多博主都只讲安装了glib.apk 核心包就行,其实这里需要安装3个包 以2.3.0为例 需要安装的包为

    安装命令如下

    apk --no-cache add libstdc++ ca-certificates bash  wget
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-bin-2.30-r0.apk
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-i18n-2.30-r0.apk
    apk add glibc-2.30-r0.apk && apk add glibc-bin-2.30-r0.apk && apk add glibc-i18n-2.30-r0.apk
    

      

    安装完后就没有问题了,测试方法 可以写一个main方法在容器中验证是否能执行通过Class.forName("sun.awt.X11FontManager");,当在验证码不可行环境的时候 报错的消息为

    /usr/local/jdk1.8.0_301/jre/lib/amd64/libfontmanager.so: libgcc_s.so.1: cann......

    还有就是可以进入在运行中的容器直接安装 安装完成了之后基本上就没有问题了。

    错误二

      该错误在openJDK中出现过,OracleJDK没有出现。

    error while loading shared libraries: libz.so.1: cannot open shared object file:
    

      解决方式就安装zlib 安装命令如下

    curl -Ls https://archive.archlinux.org/packages/z/zlib/zlib-1%3A1.2.9-1-x86_64.pkg.tar.xz -o libz.tar.xz && mkdir -p libz && tar -xf libz.tar.xz -C libz
    
    mv libz/usr/lib/libz.so* /usr/glibc-compat/lib
    
    rm -rf libz.tar.xz
    

      安装好后 没有问题了

    dragonwell openjdk Dockerfile

    另贴上基于alpine的阿里dragonwell openjdk的Dockerfile

    dragonwell JDK Dockerfile

    FROM alpine:3.8
    LABEL maintainer="xstao"
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && \
        echo ${TZ} > /etc/timezone
    #mirrons aliun
    RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
        echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
        RUN apk update && apk upgrade
    #install glibc
    RUN apk --no-cache add libstdc++ ca-certificates bash  wget curl  && \
        wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub  && \
        wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk && \
        wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-bin-2.30-r0.apk && \
        wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-i18n-2.30-r0.apk && \
        apk add glibc-2.30-r0.apk && apk add glibc-bin-2.30-r0.apk && apk add glibc-i18n-2.30-r0.apk && \
        curl -Ls https://archive.archlinux.org/packages/z/zlib/zlib-1%3A1.2.9-1-x86_64.pkg.tar.xz -o libz.tar.xz && mkdir -p libz && tar -xf libz.tar.xz -C libz && \
        mv libz/usr/lib/libz.so* /usr/glibc-compat/lib && \
        rm glibc-2.30-r0.apk && rm glibc-bin-2.30-r0.apk && rm glibc-i18n-2.30-r0.apk && rm -rf /var/cache/apk/* && rm -rf libz/* &&  rm -rf libz.tar.xz
    
    
    RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig
    
    
    ENV JAVA_VERSION="jdk8u302-b01"
    ENV JAVA_HOME="/usr/local/${JAVA_VERSION}"
    
    ENV PATH="${JAVA_HOME}/bin:${PATH}"
    # 
    WORKDIR /opt
    RUN wget https://dragonwell.oss-cn-shanghai.aliyuncs.com/8.8.9/Alibaba_Dragonwell_8.8.9_x64_linux.tar.gz
    RUN tar -zxf Alibaba_Dragonwell_8.8.9_x64_linux.tar.gz
    RUN mv ${JAVA_VERSION} /usr/local
    RUN rm -rf Alibaba_Dragonwell_8.8.9_x64_linux.tar.gz
    

      

    转载请注明出处。

    作者:peachyy

    出处:http://www.cnblogs.com/peachyy/

  • 相关阅读:
    算法之【仿竖式算法】
    算法之【大整数乘法】
    EIGRP系统复习【转载】
    算法之【插入排序法】
    算法之【折半插入法】
    ★10 个实用技巧,让Finder带你飞~
    ★宣传广告变成社会标准
    ★路由递归查询方法及相关图…
    自制tunnel口建虚拟专网实验
    【★】路由环路大总结!
  • 原文地址:https://www.cnblogs.com/peachyy/p/15538550.html
Copyright © 2011-2022 走看看