I have a simple spring boot service which performs CRUD Operations using MySQL. I dockerized my service and pulled an image of mysql and got the images to run on the same network and work.
The problem is that i am unable to access the service using the default exposed port (defined as 7070).
Here are my spring datasource properties defined in application.properties:
spring.datasource.url=jdbc:mysql://0.0.0.0:3306/test
#spring.datasource.url=jdbc:mysql://mysql:3306/test
spring.datasource.username=root
spring.datasource.password=image
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
#----ADDITIONAL PROPERTIES-----#
server.port = 7070
server.servlet.context-path=/jpatest
server.servlet.session.timeout=15m
Here is how i pulled and ran the mysql image:
$ docker network create image
$ docker run --name mysql --network image -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<pwd> -d mysql:8.3.0
$ docker run -it --network image --rm mysql mysql -hmysql -uroot -p<pwd>
This is my DOCKERFILE:
FROM eclipse-temurin:17-jdk-focal as build
WORKDIR /app
COPY gradlew .
COPY gradle gradle
COPY build.gradle settings.gradle ./
COPY src src
RUN ./gradlew clean build
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/build/libs/*.jar ./
EXPOSE 7070
ENTRYPOINT ["java", "-jar", "jpatest-0.0.1-SNAPSHOT.jar"]
This is the docker start command: docker run -it --network image --publish 7070 <image_name>
Here are the spring startup logs:
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _
( ( )___ | '_ | '_| | '_ / _` |
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.2)
2024-07-01T11:07:30.356Z INFO 1 --- [ main] com.test.jpatest.JpatestApplication : Starting JpatestApplication v0.0.1-SNAPSHOT using Java 17.0.2 with PID 1 (/app/jpatest-0.0.1-SNAPSHOT.jar started by root in /app)
2024-07-01T11:07:30.369Z INFO 1 --- [ main] com.test.jpatest.JpatestApplication : No active profile set, falling back to 1 default profile: "default"
2024-07-01T11:07:32.646Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-07-01T11:07:32.652Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
2024-07-01T11:07:32.723Z INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.test.jpatest.repo.TXBooking_MasterRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2024-07-01T11:07:32.728Z INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.test.jpatest.repo.UserRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2024-07-01T11:07:32.730Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 64 ms. Found 0 JDBC repository interfaces.
2024-07-01T11:07:32.745Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-07-01T11:07:32.747Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-07-01T11:07:32.985Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 229 ms. Found 2 JPA repository interfaces.
2024-07-01T11:07:34.491Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 7070 (http)
2024-07-01T11:07:34.514Z INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-07-01T11:07:34.517Z INFO 1 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.18]
2024-07-01T11:07:34.616Z INFO 1 --- [ main] o.a.c.c.C.[.[localhost].[/jpatest] : Initializing Spring embedded WebApplicationContext
2024-07-01T11:07:34.620Z INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4065 ms
2024-07-01T11:07:35.404Z INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-07-01T11:07:35.536Z INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.4.1.Final
2024-07-01T11:07:35.610Z INFO 1 --- [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2024-07-01T11:07:36.180Z INFO 1 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-07-01T11:07:36.244Z INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2024-07-01T11:07:37.071Z INFO 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2d8c729f
2024-07-01T11:07:37.077Z INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2024-07-01T11:07:39.256Z INFO 1 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-07-01T11:07:39.772Z INFO 1 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-07-01T11:07:40.413Z INFO 1 --- [ main] o.s.d.j.r.query.QueryEnhancerFactory : JSqlParser is in classpath; If applicable, JSqlParser will be used
2024-07-01T11:07:40.414Z INFO 1 --- [ main] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used.
2024-07-01T11:07:41.374Z WARN 1 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2024-07-01T11:07:42.851Z INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 14 endpoint(s) beneath base path '/actuator'
2024-07-01T11:07:43.022Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 7070 (http) with context path '/jpatest'
2024-07-01T11:07:43.055Z INFO 1 --- [ main] com.test.jpatest.JpatestApplication : Started JpatestApplication in 14.028 seconds (process running for 15.228)
But when i access the service using the port I defined (7070), it does not find the page. But the service runs perfectly fine when I use the defined HostPort in the image inspect. Below is a snippet of my service image config.
"Ports": {
"7070/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "32770"
},
{
"HostIp": "::",
"HostPort": "32770"
}
]
},
The service works when i use http://0.0.0.0:32770/jpatest
or http://localhost:32770/jpatest
I have to inspect the container every time to get the defined HostPort as it keeps changing every time i stop and start the service.
Is there any solution to this?
The service works when i use http://0.0.0.0:32770/jpatest or http://localhost:32770/jpatest
I have to inspect the container every time to get the defined HostPort as it keeps changing every time i stop and start the service.
I am expecting my service to be accessible on the port i exposed (7070) but it is not.
Is there any solution to this?
user25426008 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.