使用maven zip创建首个Docker镜像构建失败问题咨询
问题排查与修复方案
1 构建提示找不到Dockerfile的原因及修复
默认docker build命令会自动读取当前目录下名为Dockerfile(无后缀,大小写敏感)的构建配置文件,你当前使用自定义命名的dockerfile.docker,需要通过-f参数显式指定文件路径,修正后的构建命令为:
docker build -f dockerfile.docker -t apache-maven:2.1.0 .
也可以直接将文件重命名为Dockerfile,即可直接使用原构建命令。
2 现有Dockerfile的问题及修正版本
你当前编写的Dockerfile存在多处逻辑错误,无法正常完成构建,问题点如下:
- 基础镜像选择错误:
FROM scratch是完全空白的基础镜像,无任何系统命令与运行环境,无法执行wget、unzip等指令,且Maven运行依赖Java环境,需要选择带JDK的基础镜像。 - 维护者标签重复定义:重复设置
LABEL maintainer会导致后定义的内容覆盖先定义的内容,建议合并为一条。 - 缺少必要依赖:轻量系统镜像默认未预装
wget、unzip工具,需要先安装对应依赖才能执行后续下载、解压操作。 - 指令参数不全:
unzip命令未指定要解压的压缩包路径,无法完成解压操作,且解压后未配置环境变量会导致mvn命令无法全局调用。 - 镜像冗余未清理:下载的压缩包未删除会导致镜像体积过大。
修正后的完整Dockerfile参考:
# syntax=docker/dockerfile:1 FROM openjdk:8-jdk-alpine LABEL maintainer="Myname <myemail>" RUN apk add --no-cache wget unzip \ && wget http://archive.apache.org/dist/maven/binaries/apache-maven-2.1.0-bin.zip \ && unzip apache-maven-2.1.0-bin.zip -d /opt \ && rm -f apache-maven-2.1.0-bin.zip ENV MAVEN_HOME=/opt/apache-maven-2.1.0 ENV PATH=$MAVEN_HOME/bin:$PATH
3 镜像推送到指定端点的操作步骤
- 给本地镜像打符合目标仓库规则的标签,假设目标镜像仓库地址为
registry.your-domain.com/your-namespace,打标签命令为:
docker tag apache-maven:2.1.0 registry.your-domain.com/your-namespace/apache-maven:2.1.0
- 登录目标镜像仓库,按提示输入用户名、密码完成认证:
docker login registry.your-domain.com
- 执行推送命令即可完成上传:
docker push registry.your-domain.com/your-namespace/apache-maven:2.1.0
内容的提问来源于stack exchange,提问作者ProgrammingStudentCa
相关产品推荐
相关产品推荐

