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

Docker中Maven构建失败:maven-resources-plugin报‘Function not implemented’错误

问题:Docker容器内Maven构建maven-resources-plugin报错"Function not implemented"

尝试用Maven和Docker容器化Java Spring Boot应用时,Docker容器内执行maven-resources-plugin的resources步骤持续失败,报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project my-app: Function not implemented -> [Help 1]

环境为新托管服务器,已在系统根目录手动安装Docker、Maven和Java。

项目配置

Dockerfile内容

FROM maven:3.9.0-eclipse-temurin-19 AS MAVEN_BUILD
COPY pom.xml /build/
COPY src /build/src/
WORKDIR /build/
RUN mvn dependency:resolve
RUN mvn clean package -Pdocker

FROM eclipse-temurin:19
COPY --from=MAVEN_BUILD /build/target/my-app-1.0-SNAPSHOT.jar /app/
EXPOSE 8082
ENTRYPOINT ["java", "--add-opens", "java.base/java.time=ALL-UNNAMED", "-jar", "/app/my-app-1.0-SNAPSHOT.jar"]

pom.xml内容

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.4</version>
    </parent>

    <groupId>com.my.app</groupId>
    <artifactId>My-App-Service</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>19</maven.compiler.source>
        <maven.compiler.target>19</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!-- Include other dependencies as necessary -->
    </dependencies>

    <profiles>
        <profile>
            <id>docker</id>
            <properties>
                <env>docker</env>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

已尝试的解决方法

  • 验证非Docker环境构建正常:
    • 本地机器执行mvn clean package(非Docker环境)可完成。
    • 托管服务器非Docker环境执行Maven构建正常。
    • 本地Docker化构建无问题。
  • 提前解析依赖:在mvn clean package前添加mvn dependency:resolve步骤,无效。

解决方案

该报错多由Docker存储驱动与服务器文件系统不兼容导致,可按以下步骤排查:

1. 调整Maven构建参数(最小改动)

修改Dockerfile中的Maven构建命令,禁用资源插件的链接特性,改用文件复制:

RUN mvn clean package -Pdocker -Dmaven.resources.useLinking=false

此参数避免maven-resources-plugin使用硬链接/符号链接,绕过不支持的文件系统函数。

2. 检查并切换Docker存储驱动

执行docker info | grep "Storage Driver"查看当前驱动。若为overlay2但服务器文件系统不兼容,可临时切换到vfs驱动:

  • 编辑/etc/docker/daemon.json:
    {
      "storage-driver": "vfs"
    }
    
  • 重启Docker服务:systemctl restart docker
  • 重新构建镜像:docker build -t my-app .
    注意:vfs性能较差,仅作临时排查,后续可尝试升级服务器文件系统或调整Docker存储配置。

3. 调整容器目录权限

确保Docker容器对构建目录有完整读写权限,在Dockerfile中添加:

WORKDIR /build/
RUN chmod -R 777 /build/
RUN mvn dependency:resolve
RUN mvn clean package -Pdocker

4. 匹配旧服务器的Maven/JDK镜像版本

若旧服务器使用较旧的Maven/JDK镜像,尝试替换Dockerfile中的基础镜像:

FROM maven:3.8.6-eclipse-temurin-17 AS MAVEN_BUILD
# 同时调整运行时镜像
FROM eclipse-temurin:17

保持镜像版本与旧服务器一致,避免新镜像的特性依赖问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:04:55