以Alpine为基础镜像制作JDK环境

故障

# 操作:
	已完成jdk部署,环境变量配置,环境变量生效source /etc/profile操作
# 现象:
	如下图所示,java未找到
# 原因:
	alpine镜像使用的是musl libc库,没有gnu libc库,而该二进制文件是使用动态链接方式编译了一个使用了gnu libc库的程序生成的
# 解决:
190b23898e42:~# sed -i s#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g /etc/apk/repositories
190b23898e42:~# apk add --allow-untrusted glibc-i18n-2.35-r0.apk glibc-bin-2.35-r0.apk glibc-2.35-r0.apk
# GLIBC库下载地址:
https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-i18n-2.35-r0.apk
https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-bin-2.35-r0.apk
https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk

# 操作:
	已完成安装GLIBC库
# 现象:
	如下图所示
# 原因:
190b23898e42:~# ls -l /lib/libc.musl-x86_64.so.1
lrwxrwxrwx    1 root     root            19 Jun 14 15:03 /lib/libc.musl-x86_64.so.1 -> ld-musl-x86_64.so.1
	ls -l /lib/libc.musl-x86_64.so.1查看,发现是软链接到ld-musl-x86_64.so.1,使用的是musl库,因为alpine镜像使用的是musl libc而不是gnu libc,所以这是动态链接库位置错误导致的。
# 解决:
	安装GLIBC库后,会在/usr/目录下生成glibc-compat目录,虽然alpine镜像使用的是musl libc而不是gnu libc库,但是它们是兼容的,所以创建个软链接即可。
190b23898e42:~# rm -rf /lib/libc.musl-x86_64.so.1
190b23898e42:~# ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /lib/libc.musl-x86_64.so.1
# 咣~,刚刚的错误没有啦
190b23898e42:~# java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)



附Dockerfile

FROM alpine:3.18
WORKDIR /app
RUN mkdir /app/java
ADD apache-tomcat-9.0.0.M15.tar.gz .
ADD jdk-8u351-linux-x64.tar.gz ./java
COPY *.apk /app/
RUN sed -i s#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g /etc/apk/repositories \
        && apk add --allow-untrusted --no-cache tzdata glibc-i18n-2.35-r0.apk glibc-bin-2.35-r0.apk glibc-2.35-r0.apk || echo "忽略" \
        && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && rm -rf /lib/libc.musl-x86_64.so.1 \
        && ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /lib/libc.musl-x86_64.so.1 \
        && adduser -D appuser \
        && chown -R appuser.appuser /app \
        && rm -rf *.apk \
        && rm -rf /var/cache/apk/*
ENV JAVA_HOME=/app/java/jdk1.8.0_351
ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
ENV CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
USER appuser
EXPOSE 8080
CMD /app/apache-tomcat-9.0.0.M15/bin/startup.sh && tail -f /app/apache-tomcat-9.0.0.M15/logs/catalina.out
posted @ 2023-07-14 20:21  Driverli007  阅读(1058)  评论(1)    收藏  举报