我正在努力将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();
错误错误: Redis连接到127.0.0.11:6379失败-连接ECONNREFUSED 127.0.0.11:6379
发布于 2019-12-22 22:06:26
当您通过docker-compose运行您的容器时,它们都连接到一个公共网络。服务名称是给定容器的DNS名称,因此要从redis访问web容器,您应该创建如下所示的客户机:
const client = redis.createClient({
port : 6379,
host : 'redis'
});您还没有配置主机,所以它使用默认的主机- 127.0.0.1。但是从web容器的角度来看,redis没有在本地主机上运行。相反,它运行在自己的容器中,其中的DNS名称是redis。
发布于 2022-09-24 11:32:25
本教程的开头(对接部分)对我有用: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();https://stackoverflow.com/questions/59448292
复制相似问题