簡體   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