You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Amazon Linux2022构建Docker镜像时OpenJDK17解压报错

Docker构建时tar解压报错的解决方法

问题描述

执行docker build -t mydocker:latest构建镜像时出现解压错误,但进入镜像的bash中执行wget操作却能正常工作。

原Dockerfile内容

FROM amazonlinux:2022
RUN mkdir -p /APP
WORKDIR APP
RUN yum update -y
RUN yum install wget -y
RUN mkdir -p /usr/share/man/man1/
RUN wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
RUN yum install tar -y
RUN yum install gzip -y
COPY openjdk-17_linux-x64_bin.tar.gz /APP
RUN tar xvf openjdk-17_linux-x64_bin.tar.gz

构建报错信息

Step 11/11 : RUN tar xvf openjdk-17_linux-x64_bin.tar.gz
 ---> Running in 83a94400e4b7
jdk-17/bin/jar
jdk-17/bin/jarsigner
jdk-17/bin/java
jdk-17/bin/javac
jdk-17/bin/javadoc
jdk-17/bin/javap
jdk-17/bin/jcmd
jdk-17/bin/jconsole
jdk-17/bin/jdb
jdk-17/bin/jdeprscan
jdk-17/bin/jdeps
jdk-17/bin/jfr
jdk-17/bin/jhsdb
jdk-17/bin/jimage
jdk-17/bin/jinfo
jdk-17/bin/jlink
jdk-17/bin/jmap
jdk-17/bin/jmod
jdk-17/bin/jpackage
jdk-17/bin/jps
jdk-17/bin/jrunscript
jdk-17/bin/jshell
jdk-17/bin/jstack
jdk-17/bin/jstat
jdk-17/bin/jstatd
jdk-17/bin/keytool
jdk-17/bin/rmiregistry
jdk-17/bin/serialver
jdk-17/conf/logging.properties
jdk-17/conf/management/jmxremote.access
jdk-17/conf/management/jmxremote.password.template
jdk-17/conf/management/management.properties
jdk-17/conf/net.properties
jdk-17/conf/sdp/sdp.conf.template
jdk-17/conf/security/java.policy
jdk-17/conf/security/java.security
jdk-17/conf/security/policy/README.txt
jdk-17/conf/security/policy/limited/default_US_export.policy
jdk-17/conf/security/policy/limited/default_local.policy
jdk-17/conf/security/policy/limited/exempt_local.policy
jdk-17/conf/security/policy/unlimited/default_US_export.policy
jdk-17/conf/security/policy/unlimited/default_local.policy
jdk-17/conf/sound.properties
jdk-17/include/classfile_constants.h
jdk-17/include/jawt.h
jdk-17/include/jdwpTransport.h
jdk-17/include/jni.h
jdk-17/include/jvmti.h
jdk-17/include/jvmticmlr.h
jdk-17/include/linux/jawt_md.h
jdk-17/include/linux/jni_md.h
jdk-17/jmods/java.base.jmod

gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

问题原因

你在Dockerfile里的逻辑出现了冲突:先通过wget在容器内下载了完整的压缩包到/APP目录,紧接着用COPY命令把本地主机上的同名文件复制到容器的/APP目录,直接覆盖了刚下载的完整文件。如果本地主机上没有这个文件,或者文件本身不完整,就会导致解压时出现EOF(文件提前结束)错误。

另外原Dockerfile里的WORKDIR APP写法有误,应该写成WORKDIR /APP,否则会在当前目录下创建子目录,而非根目录的/APP。

解决方法

以下两种方案任选其一即可:

方案一:直接使用容器内下载的包(推荐)

删除多余的COPY步骤,直接解压容器内已下载的完整文件,同时合并yum命令减少镜像层数:

FROM amazonlinux:2022
RUN mkdir -p /APP
WORKDIR /APP
RUN yum update -y && yum install wget tar gzip -y
RUN mkdir -p /usr/share/man/man1/
RUN wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
RUN tar xvf openjdk-17_linux-x64_bin.tar.gz

方案二:从本地复制文件(适合离线场景)

如果本地已经有完整的压缩包,删除容器内的wget步骤,确保本地文件存在且完整:

FROM amazonlinux:2022
RUN mkdir -p /APP
WORKDIR /APP
RUN yum update -y && yum install tar gzip -y
RUN mkdir -p /usr/share/man/man1/
COPY openjdk-17_linux-x64_bin.tar.gz /APP
RUN tar xvf openjdk-17_linux-x64_bin.tar.gz

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:20:17