Dockerfile构建镜像报错:ADD指令参数不足如何解决?
解决Dockerfile中ADD指令的参数错误问题
错误原因
Docker的ADD指令从URL下载文件时,必须明确指定目标路径(可以是文件名或目录),原Dockerfile第5行仅提供了下载URL,未指定目标路径,导致解析失败。
直接修正方案
在ADD指令末尾添加目标路径,由于当前WORKDIR已设置为/opt/tomcat,使用.表示当前目录即可:
FROM centos:latest RUN yum install java -y RUN mkdir /opt/tomcat WORKDIR /opt/tomcat # 添加目标路径.,将压缩包下载到当前工作目录 ADD https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.28/bin/apache-tomcat-10.1.28.tar.gz . RUN tar -xvzf apache-tomcat-10.1.28.tar.gz RUN mv apache-tomcat-10.1.28/* /opt/tomcat EXPOSE 8080 CMD ["/opt/tomcat/bin/catalina.sh", "run"]
优化方案(减少镜像层+自动解压)
ADD指令支持自动解压tar.gz格式的文件,可直接将解压后的内容放到目标目录,同时合并RUN指令减少镜像层数:
FROM centos:latest # 合并RUN指令,减少镜像层 RUN yum install java -y && \ mkdir -p /opt/tomcat WORKDIR /opt/tomcat # 自动解压tar.gz,--strip-components=1去掉顶层目录,直接将内容放到当前目录 ADD https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.28/bin/apache-tomcat-10.1.28.tar.gz . --strip-components=1 EXPOSE 8080 CMD ["/opt/tomcat/bin/catalina.sh", "run"]
这样既解决了参数错误问题,又简化了构建步骤,减少了镜像的体积。
内容的提问来源于stack exchange,提问作者Anthony Usoro
相关产品推荐
相关产品推荐

