【问题标题】:NestJS .env not connecting to Docker Container DBNestJS .env 未连接到 Docker 容器数据库
【发布时间】: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


    【解决方案1】:

    您有.env 文件,但是,您需要让 docker 知道才能使用它。 我正在添加一个示例来展示如何使用它。

    
    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:
        ..
    

    env file documentation

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2020-05-30
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多