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

无法通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:12:46