mysql NestJs TypoORM在Docker容器中时无法连接到DB

mspsb9vt  于 2023-03-07  发布在  Mysql
关注(0)|答案(1)|浏览(139)

我有一个Nestjs服务器,我试图运行在一个docker容器,我也试图运行一个本地版本的mysql数据库,以及我使用docker组成,以保持他们在同一网络上。
这是我得到的错误
服务器_1|[Nest] 2022年8月24日,2:20:22下午错误[TypeOrmModule]无法连接到数据库。正在重试(6)... server_1|错误:连接ECONNREFUSED 127.0.0.1:3306服务器_1|在TCP连接换行处。连接后[作为完成时](节点:网络:1247:16)
我是新的 Docker ,但一直试图复制教程确切,仍然不能弄清楚为什么这不会工作。
这是我的Docker合成文件

version: '3.9'

services:
  server:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8000:8000
    volumes:
      - .:/server-workdir
      - '/server-workdir/node_modules'
    depends_on:
      - local_db
  
  local_db:
    container_name: "local_db"
    image: mysql:8.0
    ports:
      - 3306:3306
    environment:
      - MYSQL_DATABASE=local
      - MYSQL_PASSWORD=root
      - MYSQL_ROOT_PASSWORD=root

下面是我的服务器的dockerfile

FROM node:latest

WORKDIR /server-workdir

COPY package.json /server-workdir
RUN yarn install

COPY . /server-workdir/

RUN yarn run build

VOLUME [ "/server-workdir/node_modules" ]

CMD [ "yarn", "dev" ]

下面是我的巢应用程序的应用程序配置(减去任何敏感信息)

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      load: [config]
    }),
    TypeOrmModule.forRoot({
      type: "mysql",
      host: "local_db",
      port: parseInt(process.env.DB_PORT),
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      entities: [],
      synchronize: true,
    }),
    TypeOrmModule.forFeature([SeederHistory]),
    JwtModule.register({
      secret: process.env.JWT_SECRET,
      signOptions: { expiresIn: process.env.JWT_EXPIRY_TIME },
    }),
  ],
  controllers: [],
  providers: [
    {
      provide: APP_GUARD,
      useClass: JwtAuthGuard,
    },
    {
      provide: APP_GUARD,
      useClass: RolesGuard,
    },
    {
      provide: APP_PIPE,
      useClass: ValidationPipe,
    },
    SeederService,
  ],
})
export class AppModule {}

下面是. env文件

PORT="8000"
DB_HOST = "local_db"
DB_PORT = "3306"
DB_USERNAME = "root"
DB_PASSWORD = "root"
DB_NAME = "local"
JWT_EXPIRY_TIME = "2d"
HASH_ROUNDS = "14"
JWT_SECRET = "testSecret"

这确实在本地运行(不使用Docker容器),真的不确定这里出了什么问题,Docker对我来说还是个新手

mhd8tkvw

mhd8tkvw1#

算了,不用localhost,用host.docker.internal代替

相关问题