【发布时间】:2021-10-31 15:42:02
【问题描述】:
我目前正在处理一个nestjs项目,我正在尝试使用typoeorm将它连接到一个mysql/mariadb数据库,该数据库正在一个docker容器中运行(以及项目本身)。
按照nestjs“配置”的文档,我通过cli安装了包并将其导入到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 {}
我的 .env 看起来像这样
DB_USER=root
DB_PASS=example
DB_HOST=mariadb
DB_NAME=lizenzdb
DB_PORT=3306
我通过 docker-compose 启动了 docker 容器,我的 docker-compose 看起来像这样:
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
我已经尝试将项目和数据库连接到 docker 容器之外,并且成功了。我需要为 docker 容器更改的只是 db 主机从 localhost 到 docker 容器本身的名称(mariadb),但它不会连接到数据库
【问题讨论】:
标签: docker docker-compose environment-variables nestjs