使用Jib部署Spring微服务时mvn jib:build执行失败求助
Jib部署Spring微服务时连接被主机中止的问题排查与解决
问题详情
使用Jib Maven插件(3.3.0版本)将Spring Cloud的discovery-service部署至Docker Hub时,出现连接中止错误,构建卡在77.8%的镜像层推送阶段。环境为OpenJDK 17 Alpine,已尝试重启电脑、清理Docker的config.json文件,问题未解决。
构建日志如下:
PS C:\xampp\htdocs\weddingapp-main\weddingapp> mvn clean compile jib:build -rf :discovery-service [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] discovery-service [jar] [INFO] api-gateway [jar] [INFO] wedding [jar] [INFO] users [jar] [INFO] [INFO] -----------------< com.slinkdigital:discovery-service >----------------- [INFO] Building discovery-service 1.0-SNAPSHOT [1/4] [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ discovery-service --- [INFO] Deleting C:\xampp\htdocs\weddingapp-main\weddingapp\discovery-service\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ discovery-service --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 2 resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ discovery-service --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to C:\xampp\htdocs\weddingapp-main\weddingapp\discovery-service\target\classes [INFO] [INFO] --- jib-maven-plugin:3.3.0:build (default-cli) @ discovery-service --- [INFO] [INFO] Containerizing application to registry.hub.docker.com/davidtega/discovery-service... [INFO] Using credentials from Maven settings file for registry.hub.docker.com/davidtega/discovery-service [INFO] [INFO] Container entrypoint set to [java, -cp, @/app/jib-classpath-file, com.slinkdigital.eureka.DiscoveryServiceApplication] [WARNING] PATCH https://registry.hub.docker.com/v2/davidtega/discovery-service/blobs/uploads/79257277-0299-4f05-90cc-e33f34d3a44a?_state=P1UgMi0NjbwAR3C9mu77RBBM0P2yRJNUC5Qz-wEGppl7Ik5hbWUiOiJkYXZpZHRlZ2EvZGlzY292ZXJ5LXNlcnZpY2UiLCJVVUlEIjoiNzkyNTcyNzctMDI5OS00ZjA1LTkwY2MtZTMzZjM0ZDNhNDRhIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIyLTEwLTEyVDA0OjMyOjU2Ljg4OTcxNzc4OFoifQ%3D%3D failed and will NOT be retried [ERROR] I/O error for image [registry.hub.docker.com/davidtega/discovery-service]: [ERROR] java.net.SocketException [ERROR] An established connection was aborted by the software in your host machine [INFO] Executing tasks: [INFO] [======================= ] 77.8% complete [INFO] > launching layer pushers [INFO] > scheduling pushing manifests [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for discovery-service 1.0-SNAPSHOT: [INFO] [INFO] discovery-service .................................. FAILURE [32:57 min] [INFO] api-gateway ........................................ SKIPPED [INFO] wedding ............................................ SKIPPED [INFO] users .............................................. SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 32:58 min [INFO] Finished at: 2022-10-12T06:05:32+01:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:3.3.0:build (default-cli) on project discovery-service: An established connection was aborted by the software in your host machine -> [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
解决方案
1. 排查网络拦截
- 关闭本地防火墙,或添加Maven、Java进程的出站允许规则,避免拦截Jib向Docker Hub推送镜像的请求
- 若使用代理,检查Maven
settings.xml中的代理配置是否正确,确保Docker Hub域名在代理白名单内;也可临时关闭代理后重试构建
2. 延长Jib超时时间
在pom.xml的Jib插件配置中增加超时参数,给镜像推送预留更充足的时间:
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.3.0</version> <configuration> <container> <entrypoint>java, -cp, @/app/jib-classpath-file, com.slinkdigital.eureka.DiscoveryServiceApplication</entrypoint> </container> <timeout>300000</timeout> <!-- 设置为5分钟,单位毫秒 --> </configuration> </plugin>
3. 借助本地Docker daemon构建推送
先通过Jib将镜像构建到本地Docker,再手动推送至Docker Hub,绕开Jib直接网络推送的问题:
# 构建镜像到本地Docker mvn clean compile jib:dockerBuild -Dimage=registry.hub.docker.com/davidtega/discovery-service # 手动推送镜像 docker push registry.hub.docker.com/davidtega/discovery-service
4. 升级Jib插件版本
当前使用的Jib 3.3.0版本较旧,升级至最新稳定版(如3.4.0及以上),新版本可能修复了网络相关的已知bug:
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.4.0</version> <!-- 替换为最新稳定版本 --> </plugin>
5. 验证仓库权限与凭证
- 手动登录Docker Hub验证账号权限:执行
docker login registry.hub.docker.com,输入账号密码确认能正常登录 - 检查Maven
settings.xml中配置的Docker Hub凭证是否正确,确保对davidtega/discovery-service仓库拥有读写权限
内容的提问来源于stack exchange,提问作者David Ogbodu
相关产品推荐
相关产品推荐

