Docker Compose中Server容器无法启动问题排查求助
问题:Docker Compose中Server容器启动后立即退出,仅Client容器正常运行
问题描述
使用Docker Compose配置拉取client和server两个镜像,镜像拉取正常,client容器启动无异常,但server容器无法正常运行。执行docker-compose up -d后显示server已启动,但docker ps仅能看到client容器。
相关配置
Server的Dockerfile
FROM docker.io/library/gradle:7.5.1-jdk17 AS builder # 设置容器内工作目录 WORKDIR /app # 将源码复制到容器工作目录 COPY build.gradle settings.gradle /app/ COPY gradle /app/gradle COPY src /app/src # 构建应用(跳过测试) RUN gradle clean build -x test --no-watch-fs FROM docker.io/library/eclipse-temurin:17-jdk WORKDIR /app COPY --from=builder /app/build/libs/server.jar server.jar ENTRYPOINT ["java", "-jar", "server.jar"]
docker-compose.yml
version: "3.8" services: client: image: xxx/react-frontend:latest ports: - 444:80 env_file: - .env.production server: image: xxx/server:latest ports: - 8444:8444 environment: SPRING_PROFILES_ACTIVE: prod
启动日志
xxx-server-1 | Sep 05, 2023 3:38:06 PM java.util.prefs.FileSystemPreferences$1 run xxx-server-1 | INFO: Created user preferences directory. xxx-server-1 | | Welcome to JShell -- Version 17.0.8 xxx-server-1 | | For an introduction type: /help intro xxx-server-1 |
问题定位与解决步骤
核心问题
日志出现Welcome to JShell,说明Java没有执行server.jar,反而进入了交互式JShell环境。大概率是server.jar不存在、路径错误,或者jar包本身不是可执行的Spring Boot应用包。
排查与修复
验证容器内jar包状态
- 手动启动容器进入终端检查:
docker run -it --rm xxx/server:latest bash - 执行
ls /app确认server.jar是否存在;再执行java -jar server.jar,观察启动报错信息。
- 手动启动容器进入终端检查:
修正Dockerfile的jar包匹配
如果Gradle构建生成的jar包带版本号(如server-1.0.0.jar),修改COPY命令用通配符匹配:COPY --from=builder /app/build/libs/server-*.jar server.jar检查Gradle构建配置
确认项目中已引入spring-boot-gradle-plugin,确保构建出可执行的Spring Boot jar包。可在构建阶段添加日志验证:RUN gradle clean build -x test --no-watch-fs && ls -la /app/build/libs/查看容器退出详情
- 执行
docker ps -a查看server容器的退出码,非0码说明启动失败:docker ps -a | grep server - 查看完整容器日志:
docker logs xxx-server-1
- 执行
内容的提问来源于stack exchange,提问作者Beesz
相关产品推荐
相关产品推荐

