I'm trying to deploy a Spring Boot application on Heroku with Docker. The build is successful both when building the .war file and the Docker image. I'm not entirely sure where the problem exists.
I have tried defining EXPOSE 80, ENV PORT=80 in my Dockerfile and that doesn't work either. I tried defining the port in my config file application-prod.yml, but that didn't work. What else should I look for here, is there something I missed with deploying on Heroku with Spring Boot?
The error message:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
This is my 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"]
This is the log from 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
This is how I deployed my application with Heroku CLI:
heroku container:push web --app my-app-name
heroku container:release web --app my-app-name
This is the application-prod.yml file that I'm using:
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)"