javascript - 无法将Redis服务器连接到nodejs,Docker compose
问题描述
我正在努力将 redis 部署连接到我的 nodejs 应用程序。当然在本地不使用 docker,它运行良好,所以我对这是否与我的代码有关,或者我设置 docker compose 文件的方式存在分歧
Dockerfile:
FROM node:8
WORKDIR /app
COPY package.json /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
EXPOSE 3000
码头工人-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 名称,因此要从您那里访问redis
容器,web
您应该创建如下客户端:
const client = redis.createClient({
port : 6379,
host : 'redis'
});
您尚未配置主机,因此它使用默认的 - 127.0.0.1
。但是从您的容器的角度来看,web
redis 并没有在本地主机上运行。相反,它在它自己的容器中运行,其 DNS 名称为redis
.
推荐阅读
- excel - 比较两个表并在 excel 中提及新更改的值
- react-native - 无法在中间选项卡按钮和组件之间创建导航链接
- numpy - 向量乘法矩阵期间的 Numpy 点问题
- ios - 为什么数据添加到 FireBase 数据库时会自动删除?
- node.js - Angular 8/Node Js HTTP 请求在本地工作,但在服务器/net::ERR_CONNECTION_TIMED_OUT 上出现错误
- javascript - 两天(含)之间的 Javascript/Angular 天数
- javascript - 有什么方法可以检查“从不输入”并引发错误或警告吗?
- python - 具有 fit_transform 错误的列转换器
- kotlin - 如何在数据类中启动固定大小的数组
- api - 使用 Alloy API 生成与模型实例对应的 .als 文件