首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将Redis服务器连接到nodejs,Docker编写

无法将Redis服务器连接到nodejs,Docker编写
EN

Stack Overflow用户
提问于 2019-12-22 21:52:27
回答 2查看 5.1K关注 0票数 1

我正在努力将redis部署连接到我的nodejs应用程序。当然,在本地没有使用docker的情况下,它工作得很好,所以我不知道这是与我的代码有关的问题,还是我设置我的docker撰写文件的方式?

Dockerfile:

代码语言:javascript
复制
FROM node:8
WORKDIR /app
COPY package.json /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
EXPOSE 3000

docker-compose.yml

代码语言:javascript
复制
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)

代码语言:javascript
复制
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();

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-22 22:06:26

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

代码语言:javascript
复制
const client = redis.createClient({
        port      : 6379,
        host      : 'redis'
});

您还没有配置主机,所以它使用默认的主机- 127.0.0.1。但是从web容器的角度来看,redis没有在本地主机上运行。相反,它运行在自己的容器中,其中的DNS名称是redis

票数 9
EN

Stack Overflow用户

发布于 2022-09-24 11:32:25

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

代码语言:javascript
复制
docker run -d --name <CONTAINER_NAME> -p 127.0.0.1:6379:6379 redis

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

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59448292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档