问题描述
nestjs 项目,本地运行不报错,docker部署连接redis报错
本地运行,或者是编译后运行都没有任何问题,但把代码放进docker,启动就报错 Error: connect ECONNREFUSED 127.0.0.1:6379, 但我配置文件写的是服务器地址
@Module({
imports: [
CacheModule.registerAsync({
isGlobal: true,
imports: [ConfigModule],
inject: [ConfigService],
useFactory(configService: ConfigService) {
return {
store: redisStore as any,
host: configService.get('REDIS_HOST'),
port: configService.get('REDIS_PORT'),
db: configService.get('REDIS_DB'), //目标库,
password: configService.get('REDIS_PASSWORD'), // 密码,没有可以不写
};
},
}),
],
providers: [RedisCacheService],
exports: [RedisCacheService],
})
原因分析:
一开始我以为是配置文件未生效的问题,但后续发现,即使写死成服务器地址,依然是本地运行没问题,docker运行报错。
最后无意间检查发现问题,由于版本升级,写法有所改动
import { CacheModule } from '@nestjs/cache-manager';
import { redisStore } from 'cache-manager-redis-store';
import { RedisCacheService } from './redis-cache.service';
@Global()
@Module({
imports: [
CacheModule.registerAsync({
isGlobal: true,
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => {
const store = await redisStore({
socket: {
host: configService.get('REDIS_HOST'),
port: configService.get('REDIS_PORT'),
},
database: configService.get('REDIS_DB'),
password: configService.get('REDIS_PASSWORD'),
} as any);
return {
store: store as any,
};
},
}),
],
providers: [RedisCacheService],
exports: [RedisCacheService],
})
本地可以运行不报错是因为本地的redis没关,我靠,被自己愚蠢到了