【发布时间】: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.6 和1.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 文件。
-
更新问题。
标签: java maven docker spring-boot