Maven多模块项目部署子模块时Dockerfile匹配错误如何配置?
Maven多模块项目dockerfile-maven-plugin错读其他模块Dockerfile的解决方案
核心原因
你当前只指定了构建上下文路径,没有显式绑定Dockerfile路径,插件递归查找文件时可能匹配到其他模块的同名Dockerfile,加上插件继承配置可能存在交叉生效的问题,导致读取到错误的Dockerfile。
修复步骤
- 显式指定子模块的Dockerfile路径
在module-1、module-4的dockerfile-maven-plugin的<configuration>节点中,新增dockerfile配置,强制指向当前模块根目录下的Dockerfile,修改后的子模块配置如下:
<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <dependencies> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>1.2.2</version> </dependency> </dependencies> <configuration> <skip>false</skip> <repository>${docker.image.prefix}/${project.artifactId}</repository> <tag>${project.version}</tag> <useMavenSettingsForAuth>true</useMavenSettingsForAuth> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> <contextDirectory>${basedir}/</contextDirectory> <!-- 新增下面这行,强制指定当前模块的Dockerfile --> <dockerfile>${basedir}/Dockerfile</dockerfile> </configuration> <!-- 新增生命周期绑定,避免跨模块执行 --> <executions> <execution> <id>build-module-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin>
- 清理父pom的多余插件配置
父pom中仅保留全局跳过的配置即可,不要添加<executions>节点或者镜像相关的配置,避免子模块继承到错误的全局执行逻辑。 - 验证构建命令
你当前使用的mvn -pl module-1,module-2,module-3 -am clean install命令无需修改,修改配置后重新执行即可,module-1构建时只会读取自身目录下的Dockerfile生成镜像。
内容的提问来源于stack exchange,提问作者Anshul
相关产品推荐
相关产品推荐

