无法通过CURL将WAR文件部署到Wildfly Docker镜像求助
问题根源
你犯了Docker构建的核心错误:ADD/COPY命令只能读取**构建上下文(本地/CI环境的文件系统)**中的文件,而你通过RUN curl下载的artifacts.zip是存放在容器内部的文件系统里,ADD根本无法访问到它——这就是报错提示文件找不到的原因。
另外,你提到Wildfly镜像没有microdnf和unzip,其实可以用Java自带工具解压zip包,或者通过多阶段构建绕开这个问题。
解决方案1:多阶段构建(推荐)
用一个带unzip的基础镜像先处理制品下载和解压,再把WAR包复制到Wildfly镜像中,符合Docker最佳实践,还能缩小最终镜像体积:
# 第一阶段:下载并解压制品 FROM alpine:latest AS builder WORKDIR /tmp # 安装curl和unzip RUN apk add --no-cache curl unzip # 下载制品包 RUN curl -L -o artifacts.zip https://gitlab.com/api/v4/projects/MYPROJECTID/jobs/artifacts/main/download?job=build # 解压到当前目录 RUN unzip artifacts.zip # 第二阶段:构建Wildfly镜像 FROM quay.io/wildfly/wildfly ARG STANDALONE=standalone.xml COPY ${STANDALONE} /opt/jboss/wildfly/standalone/configuration/ WORKDIR /opt/jboss/wildfly/standalone/deployments/ # 从builder阶段复制WAR包到当前目录 COPY --from=builder /tmp/build/libs/ccbackend.war .
解决方案2:在Wildfly容器内直接处理(无需多阶段)
Wildfly基于的eclipse-temurin镜像自带Java,而Java的jar命令本身支持解压zip格式文件,不需要额外安装unzip:
FROM quay.io/wildfly/wildfly ARG STANDALONE=standalone.xml COPY ${STANDALONE} /opt/jboss/wildfly/standalone/configuration/ WORKDIR /opt/jboss/wildfly/standalone/deployments/ # 下载制品包 RUN curl -L -o artifacts.zip https://gitlab.com/api/v4/projects/MYPROJECTID/jobs/artifacts/main/download?job=build # 用jar命令只解压需要的WAR文件 RUN jar xf artifacts.zip build/libs/ccbackend.war # 移动WAR包到部署目录并清理无用文件 RUN mv build/libs/ccbackend.war . && rm -rf build artifacts.zip
补充说明
- 方案1优势:构建上下文更干净,不会把无关文件带入最终镜像,镜像体积更小,也避免了在Wildfly镜像中安装额外工具。
- 方案2优势:无需额外构建阶段,利用Java自带工具解决依赖问题,适合简单场景快速调整。
内容的提问来源于stack exchange,提问作者StefanoF02
相关产品推荐
相关产品推荐

