使用docker-compose设置带有Redis的节点 [英] Setting up node with redis using docker-compose

查看:508
本文介绍了使用docker-compose设置带有Redis的节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Express应用程序和React应用程序,在后端部分,我正在使用Redis。我为前端设置了一个Dockerfile,为后端设置了一个。另外,我设置了 docker-compose.yml 文件,该文件如下所示:

I have an Express app and React app, and in the backend part I'm using Redis. I setup one Dockerfile for the frontend, and one for the backend. Additionally, I setup the docker-compose.yml file, which looks like this:

# 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

And inside my backend, I call redisClient as follows:

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

配置在其中读取 .json 文件的位置我的 config 文件夹。但是,当我运行 docker-compose up 时,它会引发以下错误:

Where config reads the .json file inside my config folder. However, when I run docker-compose up, it throws the following 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) 

在我从config .json文件中读取连接字符串的设置中,如何正确地将Redis与docker-compose连接的任何想法?

Any ideas how to properly connect Redis with docker-compose in my setting where I read the connection string from the config .json file?

推荐答案

从日志看来,它试图连接到 localhost 127.0.0.1 )。express docker容器可以通过服务名 redis 到达REDIS。

From the logs it seems that it tries to connect to REDIS on localhost (127.0.0.1). The express docker container can reach REDIS by service name which is redis.

尝试替换 localhost redisConnectionString 中的 redis 。类似这样:

Try to replace localhost with redis in redisConnectionString. Something like:

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

希望能解决您的问题。

这篇关于使用docker-compose设置带有Redis的节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆