docker-compose.yml
有这样的东西:
version : "3"
services:
irbredis:
image: redis:7.2.2-alpine
container_name: irbredis
irbserver:
image: node:20.9.0-alpine
container_name: irbserver
depends_on:
- irbredis
字符串
在node.js容器的某个地方,我得到了这个:
const redis = require('redis');
const rclient = redis.createClient({ url: "redis://irbredis:6379" });
型
redis服务器肯定是运行的,我可以从docker-compose中暴露端口,然后去URL检查日志。但是从node.js代码中,我得到了错误日志:
irbserver | Error: The client is closed
irbserver | at Commander._RedisClient_sendCommand (/app/node_modules/@redis/client/dist/lib/client/index.js:494:31)
irbserver | at Commander.commandsExecutor (/app/node_modules/@redis/client/dist/lib/client/index.js:189:154)
irbserver | at BaseClass.<computed> [as get] (/app/node_modules/@redis/client/dist/lib/commander.js:8:29)
irbserver | at Object.get (/app/node_modules/connect-redis/dist/cjs/index.js:20:34)
irbserver | at RedisStore.get (/app/node_modules/connect-redis/dist/cjs/index.js:53:42)
irbserver | at session (/app/node_modules/express-session/index.js:485:11)
irbserver | at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
irbserver | at trim_prefix (/app/node_modules/express/lib/router/index.js:328:13)
irbserver | at /app/node_modules/express/lib/router/index.js:286:9
irbserver | at Function.process_params (/app/node_modules/express/lib/router/index.js:346:12)
型
我做错了什么?
更多context/node.js代码:redisFunc.js
个
const redis = require('redis');
const rclient = redis.createClient({ url: "redis://irbredis:6379" });
module.exports =
{
rclient : rclient
}
型
在sessionMW.js
中使用:
const session = require('express-session');
const RedisStore = require('connect-redis').default;
module.exports =
session
(
{
store: new RedisStore({ client : require('./redisFunc.js').rclient }),
//...
}
);
型
在index.js
中使用
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(require('./sessionMW.js'));
//...
型
版本:
"connect-redis": "^7.1.0",
"express": "^4.18.2",
"express-session": "^1.17.3",
"redis": "^4.6.10",
型
1条答案
按热度按时间nkoocmlb1#
使用docker-compose网络(或一般的docker),您需要做的第一件事通常是公开必要的容器端口。在这种情况下,您希望默认网络上的容器能够访问
irbredis
容器上的端口6379,因此您需要(至少)添加以下内容字符串
到
irbredis
服务的配置。在这一点上,如果你仍然得到连接关闭的问题,(并且您可以验证网络是否已启动并可从应用程序容器中访问,这通常涉及在该容器中运行交互式shell并向该端口发送ping),接下来要查看的是应用程序代码中的错误(例如忘记连接,或在准备好之前尝试使用连接)。