spring-boot - 在 Heroku 上绑定 Spring Boot 端口失败
问题描述
我正在尝试使用 Docker 在 Heroku 上部署 Spring Boot 应用程序。构建 .war 文件和 Docker 映像时构建成功。我不完全确定问题出在哪里。
我已经尝试在我的 Dockerfile 中定义EXPOSE 80
,ENV PORT=80
但这也不起作用。我尝试在我的配置文件application-prod.yml中定义端口,但这不起作用。我还应该在这里寻找什么,在使用 Spring Boot 在 Heroku 上部署时我是否遗漏了什么?
错误信息:
错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT
这是我的Dockerfile:
FROM tomcat:jdk16-openjdk-slim
# Java options
ENV JAVA_TOOL_OPTIONS="-Xms100M -Xmx100M -Dspring.profiles.active=prod -Dserver.port=80"
ENV PORT=80
# Firebase Config
ENV GOOGLE_APPLICATION_CREDENTIALS=./src/main/resources/firebase.json
# War file for Tomcat
ARG WAR_FILE=/build/libs/mefit-0.0.1-SNAPSHOT.war
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ${WAR_FILE} /usr/local/tomcat/webapps/ROOT.war
ENV CATALINA_OPTS="-Xms100M -Xmx100M"
EXPOSE 80
CMD ["catalina.sh", "run"]
这是 Heroku 的日志:
021-09-20T12:34:35.702071+00:00 heroku[web.1]: Starting process with command `catalina.sh run`
2021-09-20T12:34:36.462169+00:00 app[web.1]: NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
2021-09-20T12:34:36.463899+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xms100M -Xmx100M -Dspring.profiles.active=prod -Dserver.port=80
2021-09-20T12:34:36.886149+00:00 app[web.1]: 20-Sep-2021 12:34:36.877 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.0.11
2021-09-20T12:34:36.886476+00:00 app[web.1]: 20-Sep-2021 12:34:36.886 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Sep 6 2021 16:22:12 UTC
2021-09-20T12:34:36.886714+00:00 app[web.1]: 20-Sep-2021 12:34:36.886 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.0.11.0
2021-09-20T12:34:36.886938+00:00 app[web.1]: 20-Sep-2021 12:34:36.886 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
2021-09-20T12:34:36.887167+00:00 app[web.1]: 20-Sep-2021 12:34:36.887 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.4.0-1095-aws
2021-09-20T12:34:36.887411+00:00 app[web.1]: 20-Sep-2021 12:34:36.887 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
2021-09-20T12:34:36.887620+00:00 app[web.1]: 20-Sep-2021 12:34:36.887 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/local/openjdk-16
2021-09-20T12:34:36.887812+00:00 app[web.1]: 20-Sep-2021 12:34:36.887 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 16.0.2+7-67
2021-09-20T12:34:36.888037+00:00 app[web.1]: 20-Sep-2021 12:34:36.887 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
2021-09-20T12:34:36.888247+00:00 app[web.1]: 20-Sep-2021 12:34:36.888 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
2021-09-20T12:34:36.888451+00:00 app[web.1]: 20-Sep-2021 12:34:36.888 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
2021-09-20T12:34:37.289288+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms100M
2021-09-20T12:34:37.289384+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx100M
2021-09-20T12:34:37.289485+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dspring.profiles.active=prod
2021-09-20T12:34:37.289594+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dserver.port=80
2021-09-20T12:34:37.289689+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
2021-09-20T12:34:37.289786+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
2021-09-20T12:34:37.289879+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
2021-09-20T12:34:37.289965+00:00 app[web.1]: 20-Sep-2021 12:34:37.289 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
2021-09-20T12:34:37.290048+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
2021-09-20T12:34:37.290139+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
2021-09-20T12:34:37.290224+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
2021-09-20T12:34:37.290296+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
2021-09-20T12:34:37.290385+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
2021-09-20T12:34:37.290466+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
2021-09-20T12:34:37.290546+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms100M
2021-09-20T12:34:37.290662+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx100M
2021-09-20T12:34:37.290743+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
2021-09-20T12:34:37.290827+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
2021-09-20T12:34:37.290905+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
2021-09-20T12:34:37.290985+00:00 app[web.1]: 20-Sep-2021 12:34:37.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
2021-09-20T12:34:37.294694+00:00 app[web.1]: 20-Sep-2021 12:34:37.294 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
2021-09-20T12:34:37.294793+00:00 app[web.1]: 20-Sep-2021 12:34:37.294 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
2021-09-20T12:34:37.297476+00:00 app[web.1]: 20-Sep-2021 12:34:37.297 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1k 25 Mar 2021]
2021-09-20T12:34:38.320649+00:00 app[web.1]: 20-Sep-2021 12:34:38.320 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
2021-09-20T12:34:38.344458+00:00 app[web.1]: 20-Sep-2021 12:34:38.344 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1669] milliseconds
2021-09-20T12:34:38.397136+00:00 app[web.1]: 20-Sep-2021 12:34:38.396 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
2021-09-20T12:34:38.397311+00:00 app[web.1]: 20-Sep-2021 12:34:38.397 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.11]
2021-09-20T12:34:38.411783+00:00 app[web.1]: 20-Sep-2021 12:34:38.411 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
2021-09-20T12:34:49.601670+00:00 app[web.1]: 20-Sep-2021 12:34:49.601 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2021-09-20T12:34:49.668340+00:00 app[web.1]: 20-Sep-2021 12:34:49.668 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/ROOT.war] has finished in [11,256] ms
2021-09-20T12:34:49.677006+00:00 app[web.1]: 20-Sep-2021 12:34:49.676 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
2021-09-20T12:34:49.688535+00:00 app[web.1]: 20-Sep-2021 12:34:49.687 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [11342] milliseconds
2021-09-20T12:35:35.854246+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-09-20T12:35:35.943021+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-09-20T12:35:36.135780+00:00 heroku[web.1]: Process exited with status 137
2021-09-20T12:35:36.414530+00:00 heroku[web.1]: State changed from starting to crashed
这就是我使用 Heroku CLI 部署应用程序的方式:
heroku container:push web --app my-app-name
heroku container:release web --app my-app-name
这是我正在使用的 application-prod.yml 文件:
spring:
main:
allow-bean-definition-overriding: true
jpa:
hibernate:
ddl-auto: update
generate-ddl: true
datasource:
url: ${URL}
username: ${USERNAME}
password: ${PASSWORD}
springdoc:
api-docs:
path: /v1/docs
swagger-ui:
path: /v1/docs/index.html
operationsSorter: method
security:
firebase-props:
database-url: ${FIREBASE_DB_URL}
enable-strict-server-session: false
enable-check-session-revoked: false
enable-logout-everywhere: false
session-expiry-in-days: 5
cookie-props:
max-age-in-minutes: 7200
http-only: true
secure: false
domain: localhost
path: /
allow-credentials: true
allowed-origins:
- http://localhost:4200
allowed-methods:
- GET
- POST
- PUT
- PATCH
- DELETE
- OPTIONS
allowed-headers:
- Authorization
- Origin
- Content-Type
- Accept
- Accept-Encoding
- Accept-Language
- Access-Control-Allow-Origin
- Access-Control-Allow-Headers
- Access-Control-Request-Method
- X-Requested-With
- X-Auth-Token
- X-Xsrf-Token
- Cache-Control
- Id-Token
exposed-headers:
- X-Xsrf-Token
allowed-public-apis:
- /favicon.ico
- /session/login
- /public/*
- /test/**
logging:
level:
root: WARN
org:
springframework:
web: DEBUG
hibernate: ERROR
pattern:
console: "%d{HH:mm:ss} || %highlight(%5p) < %highlight(%-35.35logger{35}) > %highlight(%m%n)"
解决方案
你能告诉我你的 Spring Boot 属性文件吗?我想看看你是否告诉 spring boot 它的托管端口取决于环境变量。
推荐阅读
- javascript - 单击时隐藏可折叠的 Bootstrap 4 导航栏
- kubernetes - 如何配置 Mattermost 插件
- r - R selenium webdriver 即使在等待并向下滚动后也不会加载元素
- heroku - 在 Heroku 上部署托管的深度学习模型?
- sql - 从 SQL Server 中的两个表中获取不匹配的行
- knockout.js - Sort a list using lodash on knockout js
- delphi - 一个服务项目上的Delphi TclDownLoader问题
- javascript - 单击时复制 html 中的文本
- arrays - 添加到数组时“传播不可迭代实例的无效尝试”
- c# - 如何在测试中创建文件并将其转换为 HttpContent 对象?