NestJS中Bull队列无法连接Docker Redis,报错ECONNREFUSED
NestJS + Docker环境下Redis连接ECONNREFUSED错误问题
启动NestJS应用时,使用ioredis连接Redis、Bull队列连接Redis均失败,报错如下:
Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16)
已尝试多种方案无效,核心矛盾:配置返回的Redis连接参数为{host: 'redis', port: 6379},但应用仍尝试连接127.0.0.1:6379。
相关配置代码
ConfigurationModule配置
@Module({ imports: [ ConfigModule.forRoot({ load: [redisConfig], }), BullModule.registerQueueAsync({ name: 'jobs', imports: [ConfigModule.forFeature(bullQueueConfig)], useFactory: async (configService: ConfigService) => ({ redis: { ...configService.get('bullQueue'), }, }), inject: [ConfigService], }), ], controllers: [ConfigurationController], providers: [ConfigurationService, ConfigurationRepository], exports: [ConfigurationService], }) export class ConfigurationModule {}
Bull队列配置
export default registerAs('bullQueue', () => { const redisURL = process.env.NODE_ENV === 'local' ? { host: process.env.BULL_QUEUE_REDIS_HOST, port: parseInt(process.env.BULL_QUEUE_REDIS_PORT ?? '6379'), } : JSON.parse(JSON.stringify(process.env.REDIS_URL)); const env = { ...redisURL, }; return env; });
Redis配置
export default registerAs('redis', () => { const redisURL = process.env.NODE_ENV === 'local' ? { host: process.env.REDIS_HOST, port: parseInt(process.env.REDIS_PORT ?? '6379'), } : JSON.parse(JSON.stringify(process.env.REDIS_URL)); const env = { ...redisURL, }; return env; });
ioredis实例化代码
this.redisClient = new Redis({ ...newRedisObj, });
其中newRedisObj的值为:{host: 'redis', port: 6379}
Docker Compose配置
redis: container_name: redis_container image: "bitnami/redis" environment: - ALLOW_EMPTY_PASSWORD=yes restart: unless-stopped ports: - "6379:6379" volumes: - "redis_data:/bitnami/redis/data"
内容的提问来源于stack exchange,提问作者JN_newbie
相关产品推荐
相关产品推荐

