База данных postgres не существует в контейнере докеров

Мой docker-compose.yml:

version: "3.9"

services:
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: 123
      POSTGRES_DB: "haircut_studio"
      POSTGRES_USER: "postgres"
    volumes:
      - ./log-directory:/var/lib/postgresql
  app:
    build: ../
    restart: always
    ports:
      - "8080:8080"
    environment:
      - DATASOURCE_HOST=db
      - DATASOURCE_PORT=5432
    depends_on:
      - db

Докерфайл это:

FROM openjdk:17-alpine
COPY / /spd
WORKDIR /spd
RUN chmod +x gradlew
RUN ./gradlew :bootJar
WORKDIR /spd/build/libs
EXPOSE 8080
CMD ["java","-jar", "haircutStudio-0.0.1-SNAPSHOT.jar"]

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

spring.jpa.show-sql=true
#logging.level.root=debug

server.port=8080
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

datasource.username=postgres
datasource.password=123
datasource.host=localhost
datasource.port=5432
datasource.url=jdbc:postgresql://${datasource.host}:${datasource.port}/haircut_studio
spring.datasource.driver-class-name=org.postgresql.Driver

spring.flyway.baselineOnMigrate = true
logging.level.org.springframework.boot.autoconfigure=ERROR

TestDbConfig.java

package com.spdu.haircutstudio.configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.flywaydb.core.Flyway;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DbConfig {

    @Bean(destroyMethod = "close")
    public DataSource getDataSource(
            @Value("${datasource.password}") String password,
            @Value("${datasource.username}") String username,
            @Value("${datasource.url}") String jdbcUrl
    ) {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl(jdbcUrl);
        config.setUsername(username);
        config.setPassword(password);

        return new HikariDataSource(config);
    }

    @Bean
    public Flyway flyway(DataSource dataSource) {
        final Flyway flyway = Flyway.configure()
                .dataSource(dataSource)
                .locations("classpath:db")
                .outOfOrder(true)
                .load();
        flyway.migrate();
        return null;
    }
}

Когда я создал образ своего приложения, все было в порядке, затем я должен запустить образ базы данных и образ приложения. Я начинаю db с docker-compose up db и получаю: org.postgresql.util.PSQLException: FATAL: database "haircut_studio" does not exist. Что-то не так с моим DbConfig? Если я запускаю свое приложение локально, а не в контейнере Docker, мое приложение успешно подключается к БД, и я могу делать все, что хочу. Как я могу исправить эту ошибку?

Вот репозиторий GitLab: https://gitlab.com/staaankey/java/-/tree/reservation-feature

Можете ли вы войти и проверить URL-адрес вашего источника данных?

tbjorch 23.04.2022 12:21

Контейнер Postgres создает базу данных POSTGRES_DB только в том случае, если база данных еще не существует в /var/lib/postgresql. Поэтому убедитесь, что ./log-directory пуст на хосте, прежде чем запускать контейнеры.

Hans Kilian 23.04.2022 12:23

@HansKilian .local/log-directory/data пуст, прежде чем я начну

Dmytro Klopov 23.04.2022 12:31

@tbjorch Как я могу это сделать? Я перезапустил свой контейнер и получил это: PS C:\Users\hp-laptop-dmytro\IdeaProjects\java\.local> docker-compose up app Starting local_db_1 ... done Starting local_app_1 ... done Но когда образ моего приложения пытается подключиться к БД в журналах моего приложения та же ошибка: FATAL: database "haircut_studio" does not exist

Dmytro Klopov 23.04.2022 12:35

@tbjorch Я предоставил ссылку на репозиторий GitLab

Dmytro Klopov 23.04.2022 12:39
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
1
5
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Каталог данных по умолчанию — /var/lib/postgresql/data. Вам нужно отрегулировать громкость:

volumes:
  - ./log-directory:/var/lib/postgresql/data

Подробнее об этом можно прочитать здесь

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