Задать вопрос
zenithxxl
@zenithxxl
Веб-разработчик

Как связать Docker Nest.js Prisma PostgreSQL?

У меня есть docker-compse.yaml:
version: '3.8'

services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: mydb
    restart: always
    ports:
      - '5432:5432'
    networks:
      - kinonetwork

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    env_file:
      - ./backend/.env
    ports:
      - '4200:4200'
    networks:
      - kinonetwork
    depends_on:
      - postgres

Dockerfile:
# Build stage
FROM node:22.2.0 as build

WORKDIR /app

COPY package*.json yarn.lock ./

RUN yarn install --frozen-lockfile
COPY . .

RUN yarn prisma db push
RUN yarn prisma generate
# Build the application
RUN yarn build

# Production stage
FROM node:22.2.0

WORKDIR /app

COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package*.json ./
COPY --from=build /app/dist ./dist

EXPOSE 4200

CMD [ "yarn", "start:prod" ]

В env файле:
DATABASE_URL="postgresql://postgres:123456@postgres:5432/mydb?schema=public"

Проблема возникает из-за того, что yarn build возникает раньше, чем запускается бд (наверное)
Ошибка:
2025-01-06 02:45:06 PrismaClientInitializationError: Can't reach database server at `postgres`:`5432`
2025-01-06 02:45:06
2025-01-06 02:45:06 Please make sure your database server is running at `postgres`:`5432`.

Я уже пробовал добавлять скрипты ожидания, но они не помогают
  • Вопрос задан
  • 38 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Можно перенести yarn prisma db push и yarn prisma generate в Entrypoint контейнера node.js и запускать их перед стартом приложения.
Но вообще это "yarn build возникает раньше, чем запускается бд" врядли. У вас же есть
depends_on:
- postgres
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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