Задать вопрос
Evgen_Bolat
@Evgen_Bolat

Как наиболее грамотно запустить sql файл с инициализацией бд в Docker?

Пытаюсь разобраться, как создать две таблицы в базе данных docker- контейнера. Вариантов много, но все плохо проходят.

На данный момент у меня есть такой docker-compose работающий

version: '3.1'
services:
  auth-service:
    container_name: auth-service
    build: AuthApi/
    ports:
      - "8080:8080"
    depends_on:
      - db1
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db1:5432/AuthData
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=postgres
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

  db1:
    image: postgres:13
    build:
      context: ./
    ports:
      - "5433:5432"
    environment:
      - POSTGRES_DB=AuthData
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres

Необходимо создать в db1 2 таблицы, выполнив sql-файл, который имеет путь относительно docker-compose следующий "AuthApi/src/main/resources/sql/createTables.sql"

Содержимое файла. createTables.sql

CREATE TABLE users (
    id serial PRIMARY KEY,
    nickname VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password INT NOT NULL,
    created TIMESTAMP DEFAULT now()
);
CREATE TABLE sessions (
    id serial PRIMARY KEY,
    userId INT NOT NULL,
    token VARCHAR(255) NOT NULL,
    expires TIMESTAMP NOT NULL,
    FOREIGN KEY (userId) REFERENCES users(id)
);

Ещё стоит учитывать, что будет вторая бд, в которой нужно будет создать через другой файл две таблицы (упомяну на всякий случай).
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
black1277
@black1277
Вольный стрелок
Проще всего сделать так:
1 создаете папку initDatabase1 рядом с docker-compose-файлом
2 в эту папку скопируйте все SQL-файлы, которые должны выполнится после старта БД
3 в docker-compose в секции с db1 добавьте:
volumes:
      - ./initDatabase1:/docker-entrypoint-initdb.d

Для второй БД создайте папку initDatabase2 и поместите туда соответствующие SQL-файлы, а в секцию с db2:
volumes:
      - ./initDatabase2:/docker-entrypoint-initdb.d
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы