skip to Main Content

Technologies I use:

  • nestjs -> for backend
  • prisma -> for orm
  • postgresql -> database

I’m trying to run these technologies using Docker but I’m running into the following issue:

prisma schema loaded from prisma/schema.prism
Datasource "db": PostgreSQL database "nestjs", schema "public" at "localhost:5200"
Error: P1001: Can't reach database server at `localhost`:`5200`
Please make sure your database server is running at `localhost`:`5200`

docker-compose.dev.yml

version: '3.7'
services:
  db:
    image: postgres:12.9
    ports:
      - 5200:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123
      POSTGRES_DB: nestjs
    volumes:
      - database-data:/var/lib/postgresql/data
    networks:
      - sai
    restart: always

  test:
    container_name: test
    image: test
    build:
      context: .
      target: development
      dockerfile: Dockerfile
    command: npm run start:prod
    ports:
      - 3000:3000
      - 9229:9229
    networks:
      - sai
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    links:
      - db
    depends_on:
      - db
    restart: always

networks:
  sai:
    driver: bridge

volumes:
  database-data:

Nestjs does not see my locahost database on port 5200.

Dockerfile file:

FROM node:latest as development
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=development
COPY . .
RUN npm run build


FROM node:latest as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . .
COPY --from=development /usr/src/app/prisma ./prisma
COPY --from=development /usr/src/app/dist ./dist
EXPOSE 3000
CMD npm run start:prod

The npm run start:prod command also corresponds to the following in the package.json file:

...
  "generate:prisma": "npx prisma migrate dev --name init",
  "start:prod": "npm run generate:prisma && npm run dist/main",
...

2

Answers


  1. Instead of using localhost:5200 as the address of the database, you need to use db:5432.

    Localhost and the mapped port are used when connecting from the host machine. You’re connecting from another container on the bridge network and there you need to use the service name and the port the container is listening on.

    Login or Signup to reply.
  2. Instead of using localhost:5200 as the address of the database, you need to use db:5432.

    remomiendo la salucion de Hans Kilian

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search