Docker compose. Networks. Spring Boot and MySQL connection

Viewed 4765

I try to connect spring boot web app to database container. And I can ping db container from web. But web can't connect to db by exposed 3307 port. But I can connect to db by internal container port 3306. Project very simple. What is may wrong?

This is my docker-compose.yml:

    version: '3'
services:
  db:
    build:
      context: ./db
      dockerfile: Dockerfile
    image: db
    ports:
      - "3307:3306"
    volumes:
      - demo_volume:/var/lib/mysql
    networks:
      - my-backend

  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    image: web
    depends_on:
      - db
    ports:
      - "18080:8080"
    networks:
      - my-backend
    environment:
      - DATABASE_HOST=db
      - DATABASE_USER=user
      - DATABASE_PASSWORD=password
      - DATABASE_NAME=demo
      - DATABASE_PORT=3307
      - SPRING_PROFILES_ACTIVE=container
      - DEBUG=true

volumes:
  demo_volume:
    driver: local

networks:
  my-backend:
    driver: bridge

It's simple enough.

My application.yml for active profile - container

spring:
  profiles:
    container
  datasource:
    url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?characterEncoding=UTF-8
    username: ${DATABASE_USER}
    password: ${DATABASE_PASSWORD}
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect

Also very simple

db Dockerfile:

FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=admin
ENV MYSQL_DATABASE=demo
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=password

ADD dump.sql /docker-entrypoint-initdb.d/

And web Dockerfile:

FROM java:8-jre
COPY ./web.jar /app/web.jar
CMD ["java", "-jar", "/app/web.jar"]
CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/web.jar"]
2 Answers
Related