我有一个简单的Micronaut服务器,我正在尝试使用heroku.yml构建并在Heroku上启动它,但出于某种原因,当我检查日志时,该进程会在启动后立即退出。Docker镜像在本地运行得很好,但日志中没有其他输出,因此我找不到原因。
这是我的Dockerfile。
当我只是执行
我已经尝试过: 在本地连接到Heroku插件Postgres数据库上运行,完全正常 尽可能简化构建过程 删除默认端口(以确保它选择$PORT),并使用设置export PORT=8080在本地运行(完全正常,在Heroku中像我们预期的那样docker容器接收环境端口)
但我无法弄清楚为什么它在Heroku上立即退出。编辑:最初认为与端口值有关,但是我发现如何通过命令行给微服务指定一个端口,但它在Heroku上仍然无法工作(在本地可以)。
编辑: 我尝试将我的application.yml更改为以下内容,并且仍然没有任何反应。似乎根本不起作用。应用程序仍会崩溃,日志中没有任何指示原因。
这是我的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 application.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
时,我可以在本地主机上连接并运行 micronaut 服务器的 docker 容器。如果由于某种原因失败,我会在容器日志中看到输出详细说明原因。当我通过 github 部署将其上传到 heroku 时,我在日志中只看到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在本地运行(完全正常,在Heroku中像我们预期的那样docker容器接收环境端口)
但我无法弄清楚为什么它在Heroku上立即退出。编辑:最初认为与端口值有关,但是我发现如何通过命令行给微服务指定一个端口,但它在Heroku上仍然无法工作(在本地可以)。
编辑: 我尝试将我的application.yml更改为以下内容,并且仍然没有任何反应。似乎根本不起作用。应用程序仍会崩溃,日志中没有任何指示原因。
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获得额外的输出。没有任何堆栈跟踪或stderr或stdout。
heroku logs
命令查看日志吗? - kaiffeetasse