如何用fabric8 docker-maven-plugin仅执行Docker构建(无tar归档)并解决报错?
解决Docker Maven Plugin构建报错"A tar file cannot include itself"并实现纯目录构建
先跟你说下报错的核心原因:fabric8的docker-maven-plugin默认会把构建上下文打包成tar文件,而你指定的构建目录是${project.build.directory}(也就是target目录),插件生成的临时tar文件会被包含在这个目录里,形成循环引用,所以才会抛出这个错误。
解决方案:禁用tar归档,直接用本地目录构建
要实现和docker build -t .一样的纯目录构建,不依赖插件的打包/组装功能,你需要修改插件配置,关掉tar打包逻辑,明确指定target目录为构建上下文(你已经在resource阶段把Dockerfile复制到这里了,刚好符合要求)。
修改后的完整插件配置
<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.26.0</version> <configuration> <registry>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</registry> <images> <image> <name>my-image</name> <build> <!-- 禁用tar归档,直接使用本地目录作为构建上下文 --> <tarArchive> <enabled>false</enabled> </tarArchive> <!-- 指定构建上下文目录为target --> <contextDir>${project.build.directory}</contextDir> <!-- Docker会自动在上下文目录查找Dockerfile,若你的Dockerfile是自定义名称,可添加<dockerFile>你的文件名</dockerFile> --> <tags> <tag>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</tag> </tags> </build> </image> </images> </configuration> </plugin>
关键配置说明
<tarArchive><enabled>false</enabled></tarArchive>:这是核心配置,关掉插件的tar归档功能后,它会直接使用指定的本地目录作为Docker构建上下文,和你手动执行docker build的行为完全一致。<contextDir>${project.build.directory}</contextDir>:明确将target目录设为构建上下文,Docker会从这里读取Dockerfile和相关构建资源。- 移除了原来的
<dockerFileDir>,因为contextDir已经指定了目录,Docker会自动在该目录下查找默认名称的Dockerfile;如果你的Dockerfile是自定义名称,再添加<dockerFile>标签指定即可。
执行构建命令
现在直接运行下面的Maven命令就能触发构建:
mvn docker:build
这个命令会在target目录执行类似docker build -t 000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest .的操作,不会生成任何tar归档文件,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

