build.gradle中使用Palantir dockerRun后Docker容器无法启动问题
排查步骤
1. 优先查看容器运行日志
你配置了clean = true,容器退出后会被自动删除,所以docker ps和docker ps -a都看不到残留容器,也没法直接查看运行日志。先临时修改dockerRun配置输出启动日志:
dockerRun { name "${project.name}" image "${project.name}:${project.version}" ports '8080:8080' env 'KEY': 'abcdefgh' clean false // 关闭退出自动删除 attach true // 将容器的标准输出/错误输出绑定到当前控制台 }
重新执行./gradlew dockerRun就能直接看到容器启动过程的报错,比如找不到Jar包、Spring配置缺失、端口冲突等问题。
2. 检查镜像构建正确性
单独执行镜像构建任务,再手动运行镜像排查问题:
# 先构建镜像 ./gradlew dockerBuild # 手动运行镜像查看输出 docker run -p 8080:8080 ${你的项目名}:0.0.1-SNAPSHOT
如果执行后直接报错退出,就可以根据输出定位问题。
3. 修正docker配置冗余
你当前docker配置块同时使用了copySpec和files,会导致资源复制冲突:
docker { name "${project.name}:${project.version}" dockerfile file('Dockerfile') copySpec.from(jar).rename(".*","springreadyapp.jar") buildArgs(['JAR_FILE': "springreadyapp.jar"]) // 移除 files 'springreadyapp.jar' 这行,该配置会强制读取项目根目录下的同名文件,根目录没有该文件就会导致镜像内的jar包为空 }
同时添加依赖配置,保证Jar包构建完成后再执行镜像构建:
tasks.named('docker') { dependsOn(tasks.named('jar')) }
4. 其他常见问题排查
- 检查Spring Boot配置的
server.port是否为8080,如果不是需要修改dockerRun的端口映射规则,比如容器内端口是9090就改成ports '8080:9090' - 确认你配置的环境变量
KEY是应用启动必须的参数,如果值错误或者对应配置缺失,会直接导致Spring启动失败 - 可尝试替换基础镜像为
openjdk:11-jre-slim,避免官方openjdk镜像的兼容性问题
内容的提问来源于stack exchange,提问作者AdityaKapreShrewsburyBoston
相关产品推荐
相关产品推荐

