Запуск Java-приложения (Spring Boot + MySQL) с помощью Docker compose

Я пытаюсь запустить приложение на своем локальном компьютере с помощью Docker. Я также хочу запустить приложение на удаленном сервере. Без Docker в Intelij Idea все работает нормально.

На локальной машине я установил Docker. Создал Dockerfile и docker-compose.yml в корневой папке проекта. Некоторые ошибки, которые я сделал в этих файлах. Я думаю, что связь, как я понимаю, между базой данных и моим приложением не работает.

Может быть, что-то не так с MYSQL_ROOT_PASSWORD, потому что я действительно не знаю, какой пароль из MYSQL_ROOT_PASSWORD. Я просто знаю логин и пароль. Я запускаю mysql с помощью MySQLWorkbanch, я создаю здесь соединение с именем «my_connection», есть пользователь с именем «bestuser» и логин «bestuser».

введите здесь описание изображения

Это моя структура проекта

введите здесь описание изображения

Пробовал комбинировать порты, 8080:8080, 8081:8080, 3306:3306, 3307:3306.. Но ничего.

Образ MySQL работает хорошо, но образ приложения получает много ошибок.

введите здесь описание изображения

приложение.свойства

spring.datasource.url=jdbc:mysql://localhost:3306/crm?useSSL=false
spring.datasource.username=bestuser
spring.datasource.password=bestuser
#spring.datasource.password=T#3;jbY7L@m6
spring.sql.init.mode=always
#spring.datasource.initialization-mode=always
#server.port=8080




#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.jms.listener.acknowledge-mode=auto





info.name=CRM system. Accounting for sales, merchandise, payroll
info.description=CRM system. Accounting for sales, merchandise, payroll
info.author=Vitaliy Shvetsov


#spring.security.user.name=vitaliy
#spring.security.user.password=vitaliy



spring.view.prefix:/WEB-INF/
spring.view.suffix:.jsp
spring.view.view-names:views/*
#spring.thymeleaf.prefix=/webapp/WEB-INF/
#spring.thymeleaf.view-names:views/*





#management.endpoints.web.exposure.include=*


#spring.mvc.view.prefix: /WEB-INF/views/
#spring.mvc.view.suffix: .jsp
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.prefix=classpath:/templates/

# ==============================================================
# = Keep the connection alive if idle for a long time (needed in production)
# ==============================================================
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

# ==============================================================
# = Show or not log for each sql query
# ==============================================================
#spring.jpa.show-sql = true

# ==============================================================
# = Hibernate ddl auto (create, create-drop, update)
# ==============================================================
spring.jpa.hibernate.ddl-auto = update

# ==============================================================
# = The SQL dialect makes Hibernate generate better SQL for the chosen database
# ==============================================================
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

spring.main.allow-circular-references=true


докер-compose.yml

version: '3.7'

# Define services
services:
  # App backend service
  app-server:
    # Configuration for building the docker image for the backend service
    build:
      context: . # Use an image built from the specified dockerfile in the `springboot-app-server` directory.
      dockerfile: Dockerfile
    ports:
      - "8081:8080" # Forward the exposed port 4000 on the container to port 4000 on the host machine
    restart: always
    depends_on:
      - db # This service depends on mysql. Start that first.
    environment: # Pass environment variables to the service
      SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/crm?useSSL=false
      SPRING_DATASOURCE_USERNAME: bestuser
      SPRING_DATASOURCE_PASSWORD: bestuser


  # Database Service (Mysql)
  db:
    image: mysql:8.0
    ports:
      - "3307:3306"
    restart: always
    environment:
      MYSQL_DATABASE: crm
      MYSQL_USER: bestuser
      MYSQL_PASSWORD: bestuser
      MYSQL_ROOT_PASSWORD: bestuser

Докерфайл

# Use a Java base image
FROM openjdk:11

# Set the working directory
WORKDIR /

# Copy the application jar to the container
COPY target/crm-0.0.1-SNAPSHOT.war .
EXPOSE 8080
# Set the environment variables
ENV JAVA_OPTS = ""

# Define the command to run the application
CMD ["java", "-jar", "crm-0.0.1-SNAPSHOT.war"]

Помогите, пожалуйста, разобраться, что я сделал не так, заранее спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приложение ссылается на правильную базу данных?

Нет. Проверьте SPRING_DATASOURCE_URL в файле docker-compose, localhost в URL-адресе указывает на вашу локальную базу данных. Измените его на db (имя службы, которое вы указали в файле docker-compose для mysql).

Другие вопросы по теме