Настройка узла с помощью redis с помощью docker-compose - PullRequest
1 голос
/ 10 июня 2019

У меня есть приложение Express и приложение React, а в бэкэнде я использую Redis. Я установил один Dockerfile для внешнего интерфейса и один для внутреннего. Кроме того, я установил файл docker-compose.yml, который выглядит следующим образом:

# 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'

А внутри моего бэкэнда я звоню redisClient следующим образом:

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);
    });
};

Где config читает файл .json в моей папке config. Однако, когда я запускаю docker-compose up, он выдает следующую ошибку:

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) 

Есть идеи, как правильно подключить Redis с помощью docker-compose в моих настройках, где я читаю строку подключения из файла config .json?

1 Ответ

2 голосов
/ 11 июня 2019

Из журналов кажется, что он пытается подключиться к REDIS на localhost (127.0.0.1).Контейнер экспресс-докера может связаться с REDIS по имени службы redis.

Попробуйте заменить localhost на redis в redisConnectionString.Что-то вроде:

redis://[[user][:password@]]redis:6379

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...