I'm working on a nestjs project currently and I'm trying to connect it to a mysql/mariadb database with typoeorm right now which is running in a docker container (as well as the project itself).
Following the documentation of nestjs "configuration" I installed the package via the cli and imported it into the app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { User } from './auth/user.entity';
import { MoviesModule } from './movies/movies.module';
@Module({
imports: [
ConfigModule.forRoot({ //<- imported the config module
isGlobal: true,
}),
TypeOrmModule.forRoot({
type: 'mariadb',
host: process.env.DB_HOST, //<- now trying to use the .env files data
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
entities: [User],
synchronize: true,
}),
AuthModule,
MoviesModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
My .env looks like this
DB_USER=root
DB_PASS=example
DB_HOST=mariadb
DB_NAME=lizenzdb
DB_PORT=3306
I spun up the docker containers via docker-compose, my docker-compose looks like this:
version: '3.5'
services:
etk-be:
build: ./backend/
image: etk-lizenzdb-backend:final
container_name: etk-be
restart: unless-stopped
ports:
- 3000:3000
networks:
- etk
mariadb:
image: mariadb
container_name: mariadb
command: --default-authentication-plugin=mysql_native_password
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: lizenzdb
ports:
- 3306:3306
volumes:
- ./data/db:/var/lib/mysql
networks:
- etk
adminer:
image: adminer
container_name: adminer
restart: unless-stopped
ports:
- 8080:8080
networks:
- etk
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: unless-stopped
ports:
- 8081:80
environment:
- PMA_HOST=mariadb
- PMA_USER=root
- PMA_PASSWORD=example
networks:
- etk
networks:
etk:
driver: bridge
I tried connecting the project and database outside the docker containers already and it worked. All I have to change for the docker container is the db host from localhost to the name of the docker container itself (mariadb), but it won't connect to the database.
You have the .env
file, however, you need to let docker know to use it.
I am adding an example of it to show how you can use it.
services:
etk-be:
build: ./backend/
image: etk-lizenzdb-backend:final
container_name: etk-be
restart: unless-stopped
ports:
- 3000:3000
networks:
- etk
env_file:
- /path/to/envfile
mariadb:
..