I have a problem with dockerizing Spring Boot app. My docker-compose project consists of 4 parts:
- back - it`s just Spring Boot application with Tomcat on 8080. Here are my controllers for front app.
- front - Nginx + Angular
- core - mainly consists of a TCP server for receiving some information to DB in database-app, implemented on a simple Java Socket.
- database - Postgres, which I just download from the Docker Hub and configure to create the database necessary for the back-application.
My goal is to use my front-app, which is open in the browser on the host machine, manipulate data from the database from the database-app, through the controllers of my back-app.
So, I don't have any problems with building and running. Ports mapping for core, database and front apps works excellent. But not for back. I don't have any access from host to back-container from localhost:8080
(curl
requests from the host to container return an empty response, but curl
in container bash works fine). In back-app I used Spring Security, so CORS is configured to allow all requests, and CSRF is disabled, if it's matter.
Generously apologize for my broken English!
Back Dockerfile
FROM maven:3.5-jdk-8 AS build
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
RUN mvn -f /usr/src/app/pom.xml clean package
FROM gcr.io/distroless/java
ARG JAR_FILE=target/*.jar
COPY --from=build /usr/src/app/${JAR_FILE} /usr/app/back.jar
ENTRYPOINT ["java","-jar","/usr/app/back.jar"]
Core Dockerfile
FROM maven:3.5-jdk-8 AS build
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
RUN mvn -f /usr/src/app/pom.xml clean package
FROM gcr.io/distroless/java
ARG JAR_FILE=target/*.jar
COPY --from=build /usr/src/app/${JAR_FILE} /usr/app/core.jar
ENTRYPOINT ["java","-jar","/usr/app/core.jar"]
Front Dockerfile
FROM node:12 as builder
COPY package.json package-lock.json ./
RUN npm install && mkdir /app && mv ./node_modules ./app
WORKDIR /app
COPY . .
RUN npm run ng build -- --deploy-url=/ --prod
FROM nginx
COPY ./.nginx/nginx.conf /etc/nginx/nginx.conf
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/dist/snsr-front-app /usr/share/nginx/html
ENTRYPOINT ["nginx", "-g", "daemon off;"]
UPDATED 1: Dockerfile(s) are still the same.
docker-compose.yml
version: '3'
services:
snsr-front-app:
build: ./snsr-front-app
ports:
- 4200:80
depends_on:
- snsr-back-app
image: mxmtrms/snsr-front-app
networks:
- front-net
snsr-back-app:
build: ./snsr-back-app
depends_on:
- database
image: mxmtrms/snsr-back-app
networks:
- back-net
- front-net
expose:
- 8080
environment:
DB_URL: database
DB_PORT: 5432
snsr-core-app:
build: ./snsr-core-app
ports:
- 3000:3000
depends_on:
- database
image: mxmtrms/snsr-core-app
networks:
- back-net
database:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: masterkey
POSTGRES_DB: snsr
ports:
- 5432:5432
networks:
- back-net
networks:
back-net:
front-net:
nginx.conf
worker_processes 4;
events { worker_connections 1024; }
http {
upstream frontend {
server 0.0.0.0:80;
}
upstream backend {
server snsr-back-app:8080;
}
server {
listen 80;
root /usr/share/nginx/html;
include /etc/nginx/mime.types;
location / {
proxy_pass http://frontend;
try_files $uri /index.html;
}
location /api {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://backend;
}
}
}
UPDATE 2 Backend logs: https://gist.github.com/mxmtrms/ff12e2481d0ccc2781f15a961de6eab9
docker ps
:
https://gist.github.com/mxmtrms/2baaadc0e4873fc8bb28453d5c6d04f4