NestJS .env 未连接到 Docker 容器数据库
NestJS .env not connecting to Docker Container DB
我目前在一个 nestjs 项目上工作,我正在尝试将它连接到 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 容器更改的是数据库主机从本地主机到 docker 容器本身的名称 (mariadb),但它不会连接到数据库
您有 .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:
..
我目前在一个 nestjs 项目上工作,我正在尝试将它连接到 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 容器更改的是数据库主机从本地主机到 docker 容器本身的名称 (mariadb),但它不会连接到数据库
您有 .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:
..