Я пытаюсь запустить приложение на своем локальном компьютере с помощью 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"]
Помогите, пожалуйста, разобраться, что я сделал не так, заранее спасибо!
Приложение ссылается на правильную базу данных?
Нет. Проверьте SPRING_DATASOURCE_URL в файле docker-compose, localhost в URL-адресе указывает на вашу локальную базу данных. Измените его на db (имя службы, которое вы указали в файле docker-compose для mysql).