I'm trying to dockerize my Spring Boot Application.
Here my docker-compose file
version: '3.8'
services:
mysql:
image: mysql:latest
ports:
- 3306:3306
hostname: mysql
environment:
MYSQL_DATABASE: ######
MYSQL_ROOT_PASSWORD: ######
MYSQL_USER: ######
MYSQL_PASSWORD: ######
volumes:
- ./mysqldata:/var/lib/mysql
backend:
build:
context: .
dockerfile: dockerfile
ports:
- 8080:8080
depends_on:
- mysql
My dockerfile
FROM maven:3.8.4-eclipse-temurin-17-alpine AS maven
RUN mkdir -p /build
COPY pom.xml /build
COPY src /build/src
WORKDIR /build
RUN mvn -B dependency:resolve dependency:resolve-plugins
RUN mvn -DskipTests clean package
FROM tomcat:jdk8-corretto
EXPOSE 8080
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY --from=maven /build/target/promogen.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh","run"]
Inspecting backend I can see that my war is deployed. In logs I can see
2021 15:10:57.180 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
Inside /usr/local/tomcat/webapps dir I can see that ROOT.war and ROOT folder exists. I'm starting docker with the following command:
docker-compose up --build
When I access localhost:8080 Tomcat says Http Status 404 - Not Found.
Here logs after executing docker-compose up:
ā PromogenServer git:(master) ā docker-compose up --build
Building backend
[+] Building 3.3s (16/16) FINISHED
=> [internal] load build definition from dockerfile 0.4s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.4s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/tomcat:jdk8-corretto 1.8s
=> [internal] load metadata for docker.io/library/maven:3.8.4-eclipse-temurin-17-alpine 1.7s
=> [stage-1 1/3] FROM docker.io/library/tomcat:jdk8-corretto@sha256:e78680bd172c7388fb9ed123423f671c2815560412ad2df8cc73f79b7922890e 0.0s
=> [internal] load build context 0.3s
=> => transferring context: 37.39kB 0.0s
=> [maven 1/7] FROM docker.io/library/maven:3.8.4-eclipse-temurin-17-alpine@sha256:d7d5ef47f898d0ef33fb472dc63fcc67face715e337efd1728107fc9e195388d 0.0s
=> CACHED [stage-1 2/3] RUN rm -rf /usr/local/tomcat/webapps/ROOT 0.0s
=> CACHED [maven 2/7] RUN mkdir -p /build 0.0s
=> CACHED [maven 3/7] COPY pom.xml /build 0.0s
=> CACHED [maven 4/7] COPY src /build/src 0.0s
=> CACHED [maven 5/7] WORKDIR /build 0.0s
=> CACHED [maven 6/7] RUN mvn -B dependency:resolve dependency:resolve-plugins 0.0s
=> CACHED [maven 7/7] RUN mvn -DskipTests clean package 0.0s
=> CACHED [stage-1 3/3] COPY --from=maven /build/target/promogen.war /usr/local/tomcat/webapps/ROOT.war 0.0s
=> exporting to image 0.3s
=> => exporting layers 0.0s
=> => writing image sha256:6a591e6448a22aefbd44a2c5b62940acdb46b581005de8e5fe940113c6de7acf 0.1s
=> => naming to docker.io/library/promogenserver_backend 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
Starting promogenserver_mysql_1 ... done
Starting promogenserver_backend_1 ... done
Attaching to promogenserver_mysql_1, promogenserver_backend_1
mysql_1 | 2021-12-20 15:19:38+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysql_1 | 2021-12-20 15:19:39+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql_1 | 2021-12-20 15:19:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysql_1 | 2021-12-20T15:19:40.133565Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
mysql_1 | 2021-12-20T15:19:40.158480Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysql_1 | 2021-12-20T15:19:40.214360Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
backend_1 | 20-Dec-2021 15:19:42.185 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.0.14
backend_1 | 20-Dec-2021 15:19:42.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Dec 2 2021 22:01:36 UTC
backend_1 | 20-Dec-2021 15:19:42.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.0.14.0
backend_1 | 20-Dec-2021 15:19:42.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
backend_1 | 20-Dec-2021 15:19:42.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 5.10.47-linuxkit
backend_1 | 20-Dec-2021 15:19:42.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
backend_1 | 20-Dec-2021 15:19:42.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-1.8.0-amazon-corretto/jre
backend_1 | 20-Dec-2021 15:19:42.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_312-b07
backend_1 | 20-Dec-2021 15:19:42.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Amazon.com Inc.
backend_1 | 20-Dec-2021 15:19:42.196 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
backend_1 | 20-Dec-2021 15:19:42.196 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
backend_1 | 20-Dec-2021 15:19:42.209 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
backend_1 | 20-Dec-2021 15:19:42.210 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
backend_1 | 20-Dec-2021 15:19:42.211 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
backend_1 | 20-Dec-2021 15:19:42.211 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
backend_1 | 20-Dec-2021 15:19:42.212 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
backend_1 | 20-Dec-2021 15:19:42.212 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
backend_1 | 20-Dec-2021 15:19:42.213 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
backend_1 | 20-Dec-2021 15:19:42.213 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
backend_1 | 20-Dec-2021 15:19:42.213 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
backend_1 | 20-Dec-2021 15:19:42.234 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
backend_1 | 20-Dec-2021 15:19:42.234 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
backend_1 | 20-Dec-2021 15:19:42.248 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1g FIPS 21 Apr 2020]
backend_1 | 20-Dec-2021 15:19:43.623 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
backend_1 | 20-Dec-2021 15:19:43.690 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [2225] milliseconds
backend_1 | 20-Dec-2021 15:19:43.791 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
backend_1 | 20-Dec-2021 15:19:43.791 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.14]
backend_1 | 20-Dec-2021 15:19:43.873 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
mysql_1 | 2021-12-20T15:19:45.785479Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_1 | 2021-12-20T15:19:47.572660Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
mysql_1 | 2021-12-20T15:19:47.610076Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
mysql_1 | 2021-12-20T15:19:48.760762Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
mysql_1 | 2021-12-20T15:19:48.760872Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
mysql_1 | 2021-12-20T15:19:48.778784Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
mysql_1 | 2021-12-20T15:19:48.779013Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
mysql_1 | 2021-12-20T15:19:48.843650Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
mysql_1 | 2021-12-20T15:19:49.192746Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
mysql_1 | 2021-12-20T15:19:49.193439Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
backend_1 | 20-Dec-2021 15:19:51.902 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.
backend_1 | 20-Dec-2021 15:19:52.042 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/ROOT.war] has finished in [8,166] ms
backend_1 | 20-Dec-2021 15:19:52.054 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
backend_1 | 20-Dec-2021 15:19:52.081 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [8390] milliseconds
EDIT 1:
I changed tomcat image to
tomcat:8.5-jdk17-corretto
And now Spring application starts but complains about mysql connection:
Caused by: java.net.ConnectException: Connection refused
EDIT 2:
I solved it. I changed my application.properties from
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/promogen
to
spring.datasource.url=jdbc:mysql://mysql:3306/promogen
Where mysql is the String I used in services in docker-compose.yml file