#[TypeOrmModule] Unable to connect to the database

8 messages · Page 1 of 1 (latest)

fading sorrel
#

Hello, I'm unable to connect to the database. Here's my code:

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: ['.env', '.env.dev'],
      load: [configuration],
    }),
    TypeOrmModule.forRoot({
      host: configuration().database.host,
      port: configuration().database.port,
      username: configuration().database.username,
      password: configuration().database.password,
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: false,
      migrationsRun: false,
      autoLoadEntities: true,
    }),
#

dev.docker-compose.yml

services:
  mana_dev:
    build:
      context: .
      dockerfile: dev.Dockerfile
    ports:
        - 3000:3000
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    environment:
      - WATCHPACK_POLLING=true
      - NODE_ENV=${NODE_ENV}
      - PORT=3000
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_HOST=${MYSQL_HOST}
      - MYSQL_PORT=${MYSQL_PORT}
    depends_on:
        - mana_db
    command: npm run start:dev
  mana_db:
    image: mysql:5.7
    ports:
      - ${MYSQL_PORT}:3306
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:
#

dev.dockerfile

FROM node:20.13-bullseye-slim AS build
RUN apt-get update && apt-get install -y --no-install-recommends dumb-init
ENV NODE_ENV development
ENV MYSQL_PORT 3306 
WORKDIR /usr/src/app
COPY --chown=node:node . .
RUN npm install && npm ci --only=development && npm install -g @nestjs/cli && npm install --save-dev @types/node && npm install --save-dev run-script-webpack-plugin && npm i --save @nestjs/config && npm run build


FROM node:20.13-bullseye-slim AS development
ENV NODE_ENV development
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
USER node
EXPOSE 3000
CMD ["dumb-init", "node", "dist/main.js"]
#

Dockerfile


# Stage 1: Build
FROM node:20.13-bullseye-slim AS build
RUN apt-get update && apt-get install -y --no-install-recommends dumb-init 
ENV NODE_ENV production
ENV MYSQL_PORT 3306 
WORKDIR /usr/src/app
COPY --chown=node:node package*.json ./
RUN npm install && npm ci --only=production && npm install -g @nestjs/cli && npm i --save @nestjs/config
COPY --chown=node:node . .
RUN npm run build

# Stage 2: Production
FROM node:20.13-bullseye-slim AS production
RUN apt-get update && apt-get install -y --no-install-recommends dumb-init
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
USER node
EXPOSE 3000
ENTRYPOINT ["dumb-init", "--"]
CMD ["node", "dist/main.js"]
#

docker-compose.yml

services:
  mana_prod:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 3000:3000
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    environment:
      - NODE_ENV=production
      - PORT=3000
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_HOST=${MYSQL_HOST}
      - MYSQL_PORT=${MYSQL_PORT}
    depends_on:
      - mana_db
  mana_db:
    image: mysql:5.7
    ports:
      - ${MYSQL_PORT}:3306
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:
#

configuration

export default () => ({
  env: process.env.NODE_ENV || 'inconnu',
  port: parseInt(process.env.PORT, 10) || 3000,
  database: {
    type: process.env.DATABASE_TYPE,
    host: process.env.MYSQL_HOST,
    port: parseInt(process.env.MYSQL_PORT, 10),
    username: process.env.MYSQL_USER,
    password: process.env.MYSQL_PASSWORD,
    database: process.env.MYSQL_DATABASE,
  }
});
#

error

mana_prod-1 | [Nest] 7 - 05/15/2024, 1:49:34 PM  ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)... 
mana_prod-1 | AggregateError [ECONNREFUSED]:
mana_prod-1 |   at internalConnectMultiple (node:net:1117:18)
mana_prod-1 |   at afterConnectMultiple (node:net:1684:7)
...
#

I run the project with the following command:

docker compose -f docker-compose.yml --build
Do you have a solution? I think I'm using 'config' incorrectly, but I'm not sure.