Heroku进程一启动就崩溃



我有一个简单的Micronaut服务器,我正试图通过用Heroku构建它来启动Heroku。但是由于某种原因,当我检查日志时,进程一启动就退出了。docker映像在本地运行良好,日志中没有打印任何其他内容,因此我无法找到原因。

这是我的Dockerfile

FROM node as build-frontend
WORKDIR /app
COPY frontend/myfrontend/package.json .
COPY frontend/myfrontend/public ./public
COPY frontend/myfrontend/src ./src
RUN npm install .
RUN npm run build
FROM gradle:6.8.2-jre11 AS build-env
# Set the working directory to /home
WORKDIR /home
COPY --chown=gradle:gradle backend ./
COPY --from=build-frontend /app/build /home/src/main/resources/public
# Compile the application.
RUN ./gradlew assemble
FROM openjdk:11.0.10-jre-slim-buster
# Set the working directory to /home
WORKDIR /home
# Copy the compiled files over.
COPY --from=build-env /home/build/libs/myjar-0.1-all.jar /home/myjar.jar
# Starts the java app
# Using EntryPoing to pass env. variables as describe in this article
ENTRYPOINT exec java -XX:+UseContainerSupport -XX:MaxRAMPercentage=80.0 -noverify -XX:+AlwaysPreTouch -jar myjar.jar

这是我的heroku.yml

setup:
addons:
- plan: heroku-postgresql
as: DATABASE
build:
docker:
web: Dockerfile
run:
web: "exec java -XX:+UseContainerSupport -XX:MaxRAMPercentage=80.0 -noverify -XX:+AlwaysPreTouch -jar myjar.jar"

最后是我的Micronaut应用程序。Yml只设置一些配置

micronaut:
application:
name: mypackage
router:
static-resources:
default:
enabled: true
paths:
- classpath:public
mapping: /**
server:
port: ${PORT:8080}
cors:
enabled: true
datasources:
default:
driverClassName: org.postgresql.Driver
dbUrl: jdbc:postgresql://mydbhost.com:port/dbname?sslmode=require
dbUsername: dbuser
dbPassword: dbpasswd
scan:
packages: mypackage
netty:
default:
allocator:
max-order: 3

当我只做docker build -t test-image:latest .docker run -p 80:8080 test-image:latest时,我可以在本地主机上连接得很好,并且docker容器运行micronaut服务器。如果由于某种原因失败,我会在容器日志中看到详细说明原因的输出。当我把这个上传到heroku(通过github部署)时,我在日志中看到的都是

2023-01-09T22:25:50.145942+00:00 heroku[web.1]: Starting process with command `/bin/sh -c exec java -XX:+UseContainerSupport -XX:MaxRAMPercentage=80.0 -noverify -XX:+AlwaysPreTouch -jar myjar.jar`
2023-01-09T22:25:51.381760+00:00 heroku[web.1]: Process exited with status 0
2023-01-09T22:25:51.439962+00:00 heroku[web.1]: State changed from starting to crashed

我试过了:要运行它本地连接到heroku插件postgres数据库,工作得很好尽可能地简化构建删除端口上的默认值(以确保它拾取$ port),并在本地运行它时设置export port =8080(工作得很好,docker容器像我们在heroku中期望的那样拾取env端口)

我不明白为什么它会在Heroku上立即退出。编辑:最初认为它与端口值有关,但我想出了如何通过命令行给micronaut一个端口,它仍然不能在Heroku上工作(在本地工作)

编辑:我试着修改我的申请。将DB硬编码到此,仍然没有任何内容。这似乎行不通。应用程序仍然崩溃,并且在日志

中没有说明原因。
setup:
config:
PORT: $PORT
MICRONAUT_SERVER_PORT: $PORT
build:
docker:
web: Dockerfile
run:
web: "exec java -Dmicronaut.server.port=$PORT -XX:+UseContainerSupport -XX:MaxRAMPercentage=80.0 -noverify -XX:+AlwaysPreTouch -jar myjar.jar"

我仍然没有Heroku的额外输出。没有堆栈跟踪、标准错误或标准输出。

好吧,这不是一个很好的答案。Heroku文档中没有任何内容指向我为什么这样做,但是从我的Dockerfile中删除ENTRYPOINT exec java -XX:+UseContainerSupport -XX:MaxRAMPercentage=80.0 -noverify -XX:+AlwaysPreTouch -jar myjar.jar。删除入口点后,我再次看到日志,可以看到我的微aut服务器启动。在我的Dockerfile中定义了ENTRYPOINT,我只是得到了我在上面发布的"进程开始"。紧接着是进程崩溃

最新更新