繁体   English   中英

无法将Redis服务器连接到nodejs,Docker compose

[英]Can't connect Redis server to nodejs, Docker compose

我正在努力将 redis 部署连接到我的 nodejs 应用程序。 当然在本地不使用 docker,它运行良好,所以我不同意这是否与我的代码有关,或者我设置 docker 撰写文件的方式

Dockerfile:

 FROM node:8 WORKDIR /app COPY package.json /app COPY. /app RUN npm install CMD ["npm", "start"] EXPOSE 3000

docker-compose.yml

 version: "3" services: web: container_name: web-container restart: always depends_on: - redis build: . ports: - "3000:3000" links: - redis redis: container_name: redis-container image: "redis:latest" ports: - "6379:6379" volumes: -./data:/data

Redis 连接文件 (RedisService.js)

 const redis = require("redis"); const client = redis.createClient(); const DbUtils = require("../../db_utils"); const {promisify} = require("util"); const getAsync = promisify(client.get).bind(client); const existsAsync = promisify(client.exists).bind(client); class RedisCache { constructor () { var connected; // * Initiliase the connection to redis server client.on("connect", () => {console.log(" Redis cache is ready"); connected = true;}) client.on("error", (e) => {console.log("Redis cache error:\n" + e); connected = false;}); } async setData (id, data) { // * Stringify data if it's an object data = data instanceof Object? JSON.stringify(data): data; client.set(id, data); return true; } async getData (key) { return getAsync(key).then(data => { data = JSON.parse(data) instanceof Object? JSON.parse(data): data; return data; }) } async exists (key) { return existsAsync(key).then(bool => { return bool; }) } // Returns status of redis cache async getStatus () { return this.connected; } } module.exports = new RedisCache();

ERROR错误:Redis 连接到 127.0.0.11:6379 失败 - 连接 ECONNREFUSED 127.0.0.11:6379

当您通过docker-compose运行容器时,它们都连接到公共网络。 服务名称是给定容器的 DNS 名称,因此要从web访问redis容器,您应该创建如下客户端:

const client = redis.createClient({
        port      : 6379,
        host      : 'redis'
});

您尚未配置主机,因此它使用默认值 - 127.0.0.1 但是从您的web容器的角度来看,redis 没有在 localhost 上运行。 相反,它运行在它自己的容器中,DNS 名称为redis

本教程的开头(docker部分)对我有用:https://medium.com/geekculture/using-redis-with-docker-and-nodejs-express-71dccd495fd3

docker run -d --name <CONTAINER_NAME> -p 127.0.0.1:6379:6379 redis

然后在节点服务器中(如官方 redis 网站示例):

const redis = require('redis');

async function start() {
    const client = redis.createClient(6379,'127.0.0.1');
    await client.connect();

    await client.set('mykey', 'Hello from node redis');
    const myKeyValue = await client.get('mykey');
    console.log(myKeyValue); 
}

start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM