alpine:3.8环境构建Docker镜像时下载jdk-8u301-linux-x64.tar.gz失败求助
问题根因
你下载得到的4KB tar包并非有效的JDK安装文件,本质是Oracle官方早已取消了JDK历史版本的匿名下载权限,原有携带oraclelicense=accept-securebackup-cookie的请求方式已经无法通过官方校验,返回的实际是权限拒绝的网页内容,因此解压失败。你之前调整glibc版本没有效果,是因为故障出现在下载环节,还未到JDK运行的glibc兼容阶段。
可行解决方案
方案一:切换使用OpenJDK 8(兼容绝大多数业务场景,无授权风险,适配alpine:3.8基础镜像)
可直接修改Dockerfile,删除原有glibc安装、JDK下载相关的命令,替换为alpine源内的OpenJDK安装逻辑,修改后的参考代码如下:FROM alpine:3.8 RUN apk upgrade --update && \ apk add --update openjdk8 ca-certificates bash && \ mkdir -p /opt/springboot/apps/ && \ echo "export LANG=C.UTF-8" > /etc/profile.d/locale.sh方案二:业务强制要求使用Oracle JDK 8u201的场景
先通过Oracle官方账号手动下载合规的jdk-8u201-linux-x64.tar.gz安装包,放置到Docker构建上下文目录中,将原有的curl下载逻辑替换为本地COPY指令,规避官方下载限制:FROM alpine:3.8 # 把本地准备好的JDK包复制到镜像内 COPY jdk-8u201-linux-x64.tar.gz /tmp/java.tar.gz RUN apk upgrade --update && \ apk add --update curl ca-certificates bash && \ for pkg in glibc-2.23-r1 glibc-bin-2.23-r1 glibc-i18n-2.23-r1; do curl -sSL https://github.com/andyshinn/alpine-pkg-glibc/releases/download/2.23-r1/${pkg}.apk -o /tmp/${pkg}.apk; done && \ apk add --allow-untrusted /tmp/*.apk && \ rm -v /tmp/*.apk && \ mkdir -p /opt/springboot/apps/ && \ ( /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 C.UTF-8 || true ) && \ echo "export LANG=C.UTF-8" > /etc/profile.d/locale.sh && \ /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib && \ gunzip /tmp/java.tar.gz方案三:需要自动化构建的场景
把手动下载好的JDK安装包上传到企业内部的私有制品库、对象存储或内部文件服务器中,将Dockerfile中的下载地址替换为内部可访问的地址即可,无需再携带Oracle相关的Cookie参数,同时可提升下载速度、避免外部网络波动影响。
内容的提问来源于stack exchange,提问作者mansing shinde
相关产品推荐
相关产品推荐

