无法执行目标 com.spotify:dockerfile-maven-plugin:1.3.6:build on project 'foo':无法构建映像:

Posted

技术标签:

【中文标题】无法执行目标 com.spotify:dockerfile-maven-plugin:1.3.6:build on project \'foo\':无法构建映像:【英文标题】:Failed to execute goal com.spotify:dockerfile-maven-plugin:1.3.6:build on project 'foo': Could not build image:无法执行目标 com.spotify:dockerfile-maven-plugin:1.3.6:build on project 'foo':无法构建映像: 【发布时间】:2019-03-26 18:10:30 【问题描述】:

我们在 4 人的小团队中工作。我们使用 docker 来部署我们的服务。其中一项服务是 java Spring Boot 项目,该项目是在使用 maven 构建 docker 映像后部署的。为了制作 Spring Boot 服务的 docker 镜像,我们使用mvn clean package dockerfile:build

有趣的是,我的同事构建 Spring Boot 服务的 docker 镜像没有问题。我收到 Maven 错误消息:

[ERROR] Failed to execute goal com.spotify:dockerfile-maven-plugin:1.3.6:build (default-cli) on project 'foo': Could not build image: com.spotify.docker.client.shaded.com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.spotify.docker.client.messages.RegistryAuth: no String-argument constructor/factory method to deserialize from String value ('osxkeychain')

我尝试从 .m2/repository 中删除所有 maven 存储库,重新启动 docker,并删除所有图像。

后来我尝试在两个单独的命令中运行mvn clean package dockerfile:build

mvn package,然后 mvn docker:build

mvn package 通过,mvn docker:build 失败,出现与上图相同的错误。

Maven 版本3.5.4, Docker 版本18.06.1-ce, build e68fc7a, 操作系统:macOS 莫哈韦

我什至尝试重新启动我的电脑,希望它能修复它...

编辑: 这是maven pom插件dockerfile-maven-plugin

...
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
        <repository>$project.artifactId</repository>
    </configuration>
</plugin>
...

编辑 2:

完整的错误信息:

[ERROR] Failed to execute goal com.spotify:dockerfile-maven-plugin:1.3.6:build (default) on project spring-boot-service: Could not build image: com.spotify.docker.client.shaded.com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.spotify.docker.client.messages.RegistryAuth: no String-argument constructor/factory method to deserialize from String value ('swarm')
[ERROR]  at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.LinkedHashMap["stackOrchestrator"])
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

编辑 3:

docker-compose.yml

wrapper:
  image: spring-boot-service:latest
ports:
  - "8080:8080"
expose:
  - "8080"
links:
  - db
  - another-service

已解决:

在我的情况下,这是 dockerfile-maven-plugin 的错误版本。我用1.3.61.4.7 解决了这个问题。

感谢Boris!

更新:还有一件事!

确保mvn完成构建命名时正确,例如:

[INFO] Successfully built **spring-boot-service:0.0.1-SNAPSHOT**

docker-compose.yml 应该是这样的:

...
wrapper:
  image: **spring-boot-service:0.0.1-SNAPSHOT**
...

【问题讨论】:

你能分享一下 POM 文件的dockerfile-maven-plugin 部分吗? 更新了问题:) 对不起,这不是 Dockerfile 而是 Compose 文件。 更新问题。 【参考方案1】:

这是dockerfile-maven-plugin 配置:

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>dockerfile-maven-plugin</artifactId>
  <version>$dockerfile-maven-plugin.version</version>
  <executions>
    <execution>
      <id>default</id>
      <goals>
        <goal>build</goal>
        <goal>push</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <repository>$project.artifactId</repository>
    <tag>$project.version</tag>
    <buildArgs>
      <JAR_FILE>target/$project.build.finalName.jar</JAR_FILE>
    </buildArgs>
  </configuration>
</plugin>

注意:使用最新发布的版本1.4.7

这会将插件配置为使用single command 构建和推送您的图像:

$ mvn clean deploy

如果你只想构建 Docker 镜像,运行:

$ mvn clean package

【讨论】:

错误保持不变。第二行错误是:[ERROR] at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.LinkedHashMap["stackOrchestrator"])。也许是 docker 配置……但我没有为 docker 配置做任何改变 你能分享Dockerfile吗?如果您将dockerfile-maven-plugin 的版本更新为1.4.7,行为也会改变吗? wrapper: image: spring-boot-service:latest ports: - "8080:8080" expose: - "8080" links: - db - another-service 编辑了问题 我会尝试更改dockerfile-maven-plugin的版本 版本成功了。我能够mvn clean package。现在我可以docker-compose up。谢谢! :) 是否可以将评论标记为答案?

以上是关于无法执行目标 com.spotify:dockerfile-maven-plugin:1.3.6:build on project 'foo':无法构建映像:的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 com.spotify.dockerfile-maven-plugin 在 Docker Toolbox 上运行?

com.spotify.docker.client.DockerRequestException:请求错误:删除 unix://localhost:80/v1.12/containers/...:40

docker maven 出错:Failed to execute goal com.spotify:docker-maven-plugin:...: Request error: POST http

Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (build-image) on project training

使用maven插件构建docker镜像

Docker下安装kafka