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

Docker部署Java Maven Spring Boot应用镜像构建报错exit code 1求助

报错含义说明

Failed to deploy '<unknown> Dockerfile: Dockerfile': Image build failed with exit code 1 是Docker构建镜像的通用报错,指构建流程中某一步(RUN/COPY等指令)执行返回了非0的错误码,具体是哪一步失败需要结合构建过程的完整日志定位。

常见故障排查步骤

  • 检查构建命令是否传入了所有必填参数
    你的Dockerfile里定义了三个没有默认值的ARG:MICROSERVICE_NAME、MICROSERVICE_BASE_PATH,构建时必须通过--build-arg传入对应值,否则Maven打包、COPY步骤都会直接失败。
    正确的构建命令示例:
    docker build --build-arg MICROSERVICE_NAME=你的服务名 --build-arg MICROSERVICE_BASE_PATH=服务模块父目录 --build-arg APP_ENV=uat -t 镜像名 .
    
  • 检查Maven打包阶段是否报错
    你可以先在本地直接执行Dockerfile里的打包命令,验证是否可以正常生成jar包,避免是本身代码依赖、Maven配置的问题:
    mvn clean package -pl :你的服务名 -am -Dmaven.test.skip=true -Puat
    
    重点检查打包完成后,服务模块父目录/服务名/target/服务名.jar路径是否真实存在,很多时候是模块路径配置错误导致后续COPY阶段找不到文件失败。
  • 检查基础镜像可用性
    你用到的maven:3.6.3-openjdk-11-slim、openjdk:11.0都是官方镜像,如果没有配置镜像源的话,国内拉取可能超时失败,可以先手动执行docker pull maven:3.6.3-openjdk-11-slim和docker pull openjdk:11.0验证镜像是否能正常拉取。

Dockerfile优化方案

你可以对现有Dockerfile做以下调整,降低出错概率:

FROM maven:3.6.3-openjdk-11-slim as builder

ARG APP_ENV=uat
ARG MICROSERVICE_NAME
# 给MICROSERVICE_BASE_PATH加默认值,避免漏传报错
ARG MICROSERVICE_BASE_PATH=.

WORKDIR /app

# 优先复制pom文件,利用Docker缓存减少重复下载依赖
COPY pom.xml .
COPY ${MICROSERVICE_BASE_PATH}/${MICROSERVICE_NAME}/pom.xml ${MICROSERVICE_BASE_PATH}/${MICROSERVICE_NAME}/
RUN mvn dependency:go-offline -pl :${MICROSERVICE_NAME} -am -Dmaven.test.skip=true -P${APP_ENV}

# 再复制代码打包
COPY ./ ./
RUN mvn clean package -pl :${MICROSERVICE_NAME} -am -Dmaven.test.skip=true -P${APP_ENV}

FROM openjdk:11.0-jre-slim as runner
# 用jre镜像代替jdk镜像,大幅减小最终镜像体积

WORKDIR /root/java_service

ARG APP_ENV=uat
ARG MICROSERVICE_NAME
ARG MICROSERVICE_BASE_PATH=.

# 合并RUN指令,减少镜像层
RUN mkdir -p ${APP_ENV} logs

COPY --from=builder /app/${MICROSERVICE_BASE_PATH}/${MICROSERVICE_NAME}/target/${MICROSERVICE_NAME}.jar ${APP_ENV}/${MICROSERVICE_NAME}.jar

ENV APP_JAR_PATH=/root/java_service/${APP_ENV}/${MICROSERVICE_NAME}.jar

# 兼容shell变量解析,保证Java进程能收到系统信号
ENTRYPOINT ["sh", "-c", "java -server -jar ${APP_JAR_PATH}"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04