Tengo una aplicación Express y una aplicación React, y en la parte de back-end estoy usando Redis. Configuré un Dockerfile para el frontend y otro para el backend. Además, configuré el archivo docker-compose.yml , que tiene este aspecto:
# Specify docker-compose version. version: '3' # Define the services/containers to be run. services: react: build: admin ports: - '3000:3000' express: build: . container_name: api ports: - '3001:3001' depends_on: - redis links: - mongo - redis environment: - REDIS_URL=redis://cache - MONGO_URL=mongodb://db/tests mongo: image: mongo:4 container_name: db ports: - '27017:27017' redis: image: redis:4 container_name: cache ports: - '6379:6379' Y dentro de mi backend, llamo a redisClient de la siguiente manera:
const bluebird = require('bluebird'); const config = require('config'); const logger = require('./logger'); const redis = require('redis'); bluebird.promisifyAll(redis); const RedisService = function() { const redisConnectionString = process.env.REDIS_URL; this.client = redis.createClient({ url: redisConnectionString }); this.client.on('error', (err) => { logger.error(err); }); }; Donde config lee el archivo .json dentro de mi carpeta de config . Sin embargo, cuando ejecuto docker-compose up , arroja el siguiente error:
express_1 | [2019-06-10T20:14:38.169Z] error: "uncaughtException: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)¿Alguna idea de cómo conectar correctamente Redis con docker-compose en mi configuración donde leo la cadena de conexión del archivo config .json?
Según los registros, parece que intenta conectarse a REDIS en localhost ( 127.0.0.1 ). El contenedor acoplable exprés puede llegar a REDIS por el nombre del servicio, que es redis .
Intente reemplazar localhost con redis en redisConnectionString . Algo como:
redis://[[user][:password@]]redis:6379Con suerte, eso resolverá su problema.