A few days ago I started my study with Docker, took some of those cod3r courses, it looked beautiful and wonderful.
And then I started experimenting with Spring Boot, it’s a JAR file that I created from a web application, and running through windows power shell she can create the tables automatically, she can run tomcat through port 8080.
After testing it I decided to try it in the Docker, created a Dockerfile file, where it would be called by the docker-compose.yml file.
When running it, the application does not display any error messages, instead it shows that it created the tables automatically, that it connected to port 8080 and that TomCat was run. It seems to me more like a FAKE message, because when I am going to parse the Postgres database, the tables were not created, when I check by Power Shell the port is not being used, and when I see the context of the application it did not go up to URL
http://localhost:8080/lancamentos
And please don’t ask me if I’m sure if the application context is right, why it is!
That was the message I received, see with your own eyes;
$ docker-compose up --force-recreate --build
Creating network "teste_postgres-compose-network" with driver "bridge"
Creating volume "teste_pgdata-teste" with default driver
Building java
Gracefully stopping... (press Ctrl+C again to force)
DESKTOP-LTE4439+resource@DESKTOP-LTE4439 MINGW64 /c/docker/teste
$ docker-compose up --force-recreate --build
Building java
Step 1/4 : FROM openjdk:8-jdk
---> 08ded5f856cc
Step 2/4 : COPY dockerTest-1.0.0-SNAPSHOT.jar webapp.jar
---> 55282bac9bfc
Step 3/4 : EXPOSE 8080
---> Running in e2c87cfc1710
Removing intermediate container e2c87cfc1710
---> bdadf54c7c4d
Step 4/4 : ENTRYPOINT ["java","-Dspring.profiles.active=docker-demo","-jar","webapp.jar"]
---> Running in c86cedbdd72a
Removing intermediate container c86cedbdd72a
---> 9c686fc91138
Successfully built 9c686fc91138
Successfully tagged teste_java:latest
Creating postgres-kwan ... done
Creating teste_java_1 ... done
Attaching to postgres-kwan, teste_java_1
postgres-kwan | The files belonging to this database system will be owned by user "postgres".
postgres-kwan | This user must also own the server process.
postgres-kwan |
postgres-kwan | The database cluster will be initialized with locale "en_US.utf8".
postgres-kwan | The default database encoding has accordingly been set to "UTF8".
postgres-kwan | The default text search configuration will be set to "english".
postgres-kwan |
postgres-kwan | Data page checksums are disabled.
postgres-kwan |
postgres-kwan | fixing permissions on existing directory /var/lib/postgresql/data ... ok
postgres-kwan | creating subdirectories ... ok
postgres-kwan | selecting default max_connections ... 100
postgres-kwan | selecting default shared_buffers ... 128MB
postgres-kwan | selecting default timezone ... Etc/UTC
postgres-kwan | selecting dynamic shared memory implementation ... posix
postgres-kwan | creating configuration files ... ok
postgres-kwan | running bootstrap script ... ok
java_1 | SLF4J: Class path contains multiple SLF4J bindings.
java_1 | SLF4J: Found binding in [jar:file:/webapp.jar!/BOOT-INF/lib/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
java_1 | SLF4J: Found binding in [jar:file:/webapp.jar!/BOOT-INF/lib/slf4j-simple-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
java_1 | SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
postgres-kwan | performing post-bootstrap initialization ... ok
postgres-kwan | syncing data to disk ... ok
postgres-kwan |
postgres-kwan | WARNING: enabling "trust" authentication for local connections
postgres-kwan | You can change this by editing pg_hba.conf or using the option -A, or
postgres-kwan | --auth-local and --auth-host, the next time you run initdb.
postgres-kwan |
postgres-kwan | Success. You can now start the database server using:
postgres-kwan |
postgres-kwan | pg_ctl -D /var/lib/postgresql/data -l logfile start
postgres-kwan |
postgres-kwan | waiting for server to start....2019-08-29 19:17:40.407 UTC [40] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-kwan | 2019-08-29 19:17:40.428 UTC [41] LOG: database system was shut down at 2019-08-29 19:17:40 UTC
postgres-kwan | 2019-08-29 19:17:40.437 UTC [40] LOG: database system is ready to accept connections
postgres-kwan | done
postgres-kwan | server started
postgres-kwan | CREATE DATABASE
postgres-kwan |
postgres-kwan |
postgres-kwan | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
postgres-kwan |
postgres-kwan | 2019-08-29 19:17:41.030 UTC [40] LOG: received fast shutdown request
postgres-kwan | waiting for server to shut down....2019-08-29 19:17:41.031 UTC [40] LOG: aborting any active transactions
postgres-kwan | 2019-08-29 19:17:41.040 UTC [40] LOG: background worker "logical replication launcher" (PID 47) exited with exit code 1
postgres-kwan | 2019-08-29 19:17:41.041 UTC [42] LOG: shutting down
postgres-kwan | 2019-08-29 19:17:41.053 UTC [40] LOG: database system is shut down
postgres-kwan | done
postgres-kwan | server stopped
postgres-kwan |
postgres-kwan | PostgreSQL init process complete; ready for start up.
postgres-kwan |
postgres-kwan | 2019-08-29 19:17:41.167 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres-kwan | 2019-08-29 19:17:41.167 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres-kwan | 2019-08-29 19:17:41.171 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-kwan | 2019-08-29 19:17:41.207 UTC [58] LOG: database system was shut down at 2019-08-29 19:17:41 UTC
java_1 | SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
java_1 |
java_1 | . ____ _ __ _ _
java_1 | /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
java_1 | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
java_1 | \\/ ___)| |_)| | | | | || (_| | ) ) ) )
java_1 | ' |____| .__|_| |_|_| |_\__, | / / / /
java_1 | =========|_|==============|___/=/_/_/_/
java_1 | :: Spring Boot :: (v1.5.3.RELEASE)
java_1 |
java_1 | 2019-08-29 19:17:42.216 INFO 1 --- [ main] c.e.algamoney.api.DockerTestApplication : Starting DockerTestApplication v1.0.0-SNAPSHOT on 70ca5aafb40b with PID 1 (/webapp.jar started by root in /)
java_1 | 2019-08-29 19:17:42.228 INFO 1 --- [ main] c.e.algamoney.api.DockerTestApplication : The following profiles are active: docker-demo
java_1 | 2019-08-29 19:17:42.455 INFO 1 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@2328c243: startup date [Thu Aug 29 19:17:42 UTC 2019]; root of context hierarchy
java_1 | 2019-08-29 19:17:47.809 INFO 1 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
java_1 | 2019-08-29 19:17:47.855 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
java_1 | 2019-08-29 19:17:47.860 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.14
java_1 | 2019-08-29 19:17:48.111 INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
java_1 | 2019-08-29 19:17:48.113 INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 5669 ms
java_1 | 2019-08-29 19:17:48.486 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
java_1 | 2019-08-29 19:17:48.500 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'corsFilter' to: [/*]
java_1 | 2019-08-29 19:17:48.503 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
java_1 | 2019-08-29 19:17:48.504 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
java_1 | 2019-08-29 19:17:48.509 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
java_1 | 2019-08-29 19:17:48.510 INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
java_1 | 2019-08-29 19:17:49.180 INFO 1 --- [ main] o.f.core.internal.util.VersionPrinter : Flyway 3.2.1 by Boxfuse
java_1 | 2019-08-29 19:17:49.469 INFO 1 --- [ main] o.f.c.i.dbsupport.DbSupportFactory : Database: jdbc:postgresql://kwan:5432/POSTGRESQL (PostgreSQL 11.5)
java_1 | 2019-08-29 19:17:49.575 INFO 1 --- [ main] o.f.core.internal.command.DbValidate : Validated 5 migrations (execution time 00:00.032s)
java_1 | 2019-08-29 19:17:49.599 INFO 1 --- [ main] o.f.c.i.metadatatable.MetaDataTableImpl : Creating Metadata table: "public"."schema_version"
java_1 | 2019-08-29 19:17:49.673 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >>
java_1 | 2019-08-29 19:17:49.677 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version 01 - criar e registrar categorias
java_1 | 2019-08-29 19:17:49.727 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version 02 - criar tabela pessoa
java_1 | 2019-08-29 19:17:49.781 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version 03 - criar tabela e registrar lancamentos
java_1 | 2019-08-29 19:17:49.834 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version 04 - criar e registrar usuarios e permissoes
java_1 | 2019-08-29 19:17:49.879 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version 05 - criar tabela contato
java_1 | 2019-08-29 19:17:49.926 INFO 1 --- [ main] o.f.core.internal.command.DbMigrate : Successfully applied 5 migrations to schema "public" (execution time 00:00.327s).
java_1 | 2019-08-29 19:17:50.248 INFO 1 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
java_1 | 2019-08-29 19:17:50.285 INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
java_1 | name: default
java_1 | ...]
java_1 | 2019-08-29 19:17:50.499 INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.12.Final}
java_1 | 2019-08-29 19:17:50.506 INFO 1 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
java_1 | 2019-08-29 19:17:50.510 INFO 1 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
java_1 | 2019-08-29 19:17:50.620 INFO 1 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
java_1 | 2019-08-29 19:17:51.129 INFO 1 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
java_1 | 2019-08-29 19:17:51.519 INFO 1 --- [ main] o.h.e.j.e.i.LobCreatorBuilderImpl : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
java_1 | 2019-08-29 19:17:51.525 INFO 1 --- [ main] org.hibernate.type.BasicTypeRegistry : HHH000270: Type registration [java.util.UUID] overrides previous : org.hibernate.type.UUIDBinaryType@1acaf3d
java_1 | 2019-08-29 19:17:52.559 INFO 1 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
java_1 | 2019-08-29 19:17:53.843 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@2328c243: startup date [Thu Aug 29 19:17:42 UTC 2019]; root of context hierarchy
java_1 | 2019-08-29 19:17:54.075 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/categorias],methods=[GET]}" onto public java.util.List<com.example.algamoney.api.model.Categoria> com.example.algamoney.api.resource.CategoriaResource.listar()
java_1 | 2019-08-29 19:17:54.079 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/categorias],methods=[POST]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Categoria> com.example.algamoney.api.resource.CategoriaResource.criar(com.example.algamoney.api.model.Categoria,javax.servlet.http.HttpServletResponse)
java_1 | 2019-08-29 19:17:54.085 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/categorias/{codigo}],methods=[GET]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Categoria> com.example.algamoney.api.resource.CategoriaResource.buscarPeloCodigo(java.lang.Long)
java_1 | 2019-08-29 19:17:54.091 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lancamentos/{codigo}],methods=[DELETE]}" onto public void com.example.algamoney.api.resource.LancamentoResource.remover(java.lang.Long)
java_1 | 2019-08-29 19:17:54.097 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lancamentos],methods=[POST]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Lancamento> com.example.algamoney.api.resource.LancamentoResource.criar(com.example.algamoney.api.model.Lancamento,javax.servlet.http.HttpServletResponse)
java_1 | 2019-08-29 19:17:54.098 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lancamentos/{codigo}],methods=[GET]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Lancamento> com.example.algamoney.api.resource.LancamentoResource.buscarPeloCodigo(java.lang.Long)
java_1 | 2019-08-29 19:17:54.101 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lancamentos],methods=[GET]}" onto public org.springframework.data.domain.Page<com.example.algamoney.api.model.Lancamento> com.example.algamoney.api.resource.LancamentoResource.pesquisar(com.example.algamoney.api.repository.filter.LancamentoFilter,org.springframework.data.domain.Pageable)
java_1 | 2019-08-29 19:17:54.117 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/pessoas/{codigo}],methods=[DELETE]}" onto public void com.example.algamoney.api.resource.PessoaResource.remover(java.lang.Long)
java_1 | 2019-08-29 19:17:54.119 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/pessoas/{codigo}],methods=[PUT]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Pessoa> com.example.algamoney.api.resource.PessoaResource.atualizar(java.lang.Long,com.example.algamoney.api.model.Pessoa)
java_1 | 2019-08-29 19:17:54.121 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/pessoas/{codigo}/ativo],methods=[PUT]}" onto public void com.example.algamoney.api.resource.PessoaResource.atualizarPropriedadeAtivo(java.lang.Long,java.lang.Boolean)
java_1 | 2019-08-29 19:17:54.121 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/pessoas],methods=[POST]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Pessoa> com.example.algamoney.api.resource.PessoaResource.criar(com.example.algamoney.api.model.Pessoa,javax.servlet.http.HttpServletResponse)
java_1 | 2019-08-29 19:17:54.122 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/pessoas/{codigo}],methods=[GET]}" onto public org.springframework.http.ResponseEntity<com.example.algamoney.api.model.Pessoa> com.example.algamoney.api.resource.PessoaResource.buscarPeloCodigo(java.lang.Long)
java_1 | 2019-08-29 19:17:54.139 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
java_1 | 2019-08-29 19:17:54.141 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
java_1 | 2019-08-29 19:17:54.216 INFO 1 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
java_1 | 2019-08-29 19:17:54.216 INFO 1 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
java_1 | 2019-08-29 19:17:54.260 INFO 1 --- [ main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in algamoneyExceptionHandler
java_1 | 2019-08-29 19:17:54.314 INFO 1 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
java_1 | 2019-08-29 19:17:54.884 INFO 1 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
java_1 | 2019-08-29 19:17:55.050 INFO 1 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
DockerFile ;
FROM openjdk:8-jdk
COPY dockerTest-1.0.0-SNAPSHOT.jar webapp.jar
EXPOSE 8080
ENTRYPOINT ["java","-Dspring.profiles.active=docker-demo","-jar","webapp.jar"]
docker-compose.yml
version: "3.5"
services:
kwan:
image: postgres
container_name: postgres-kwan
environment:
- POSTGRES_PASSWORD=root
- POSTGRES_USER=postgres
- POSTGRES_DB=POSTGRESQL
ports:
- "5432:5432"
volumes:
- pgdata-teste:/var/lib/postgresql/data
networks:
- postgres-compose-network
java:
build:
context: ./
dockerfile: Dockerfile
depends_on:
- kwan
ports:
- 8080:8080
expose:
- "8080"
environment:
- spring_datasource_platform=postgres
- SPRING_DATASOURCE_URL=jdbc:postgresql://kwan:5432/POSTGRESQL
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=root
networks:
- postgres-compose-network
networks:
postgres-compose-network:
driver: bridge
volumes:
pgdata-teste: