You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:27:04