使用docker-compose设置带有Redis的节点 [英] Setting up node with redis using docker-compose
问题描述
我有一个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屋!