Node.js Docker Nodejs Redis与127.0.0.1:6379的连接失败
我想在docker中将Redis与我的express服务器一起使用。我正在使用docker compose使用Redis构建我的应用程序。这是我的Dockerfile的代码Node.js Docker Nodejs Redis与127.0.0.1:6379的连接失败,node.js,docker,redis,docker-compose,Node.js,Docker,Redis,Docker Compose,我想在docker中将Redis与我的express服务器一起使用。我正在使用docker compose使用Redis构建我的应用程序。这是我的Dockerfile的代码 FROM node:12-alpine WORKDIR '/var/www/app' 以下是docker compose.yml文件的代码: redis: image: redis container_name: cache expose: - 6379 app: build: ./ volum
FROM node:12-alpine
WORKDIR '/var/www/app'
以下是docker compose.yml文件的代码:
redis:
image: redis
container_name: cache
expose:
- 6379
app:
build: ./
volumes:
- ./:/var/www/app
links:
- redis
ports:
- 7000:7000
environment:
- REDIS_URL = redis
- NODE_ENV=development
- PORT=7000
command:
sh -c 'npm i && node server.js'
即使我在docker-compose.yml文件中公开了端口6379,我也无法调试它为什么拒绝连接。
下面是我的server.js文件代码
const express = require("express");
const app = express();
const redis =require("redis")
let client=redis.createClient(process.env.REDIS_URL)
client.on('connect',()=>{
console.log("redis connected")
});
client.on("error", function (err) {
console.log("Error " + err);
});
var port = process.env.PORT || 7000;
app.listen(port, () => {
console.log(`Server is listening in port: ${port}`);
});
我使用了以下命令来构建应用程序
sudo docker-compose up --build
任何指导都会有帮助。谢谢
redis:
image: redis
container_name: cache
ports:
- 6379:6379
app:
build: ./
volumes:
- ./:/var/www/app
ports:
- 7000:7000
environment:
- REDIS_URL=localhost
- NODE_ENV=development
- PORT=7000
command:
sh -c 'npm i && node server.js'
我向redis添加了端口
,并删除了链接
。请尝试此操作并更新
我向redis添加了
端口
,并删除了链接
。请尝试此操作并更新。只需删除中间的空格即可解决此问题,并将环境后的第一行更改为REDIS_URL=redis://cache
多亏了@ozlevka,我们只需删除中间的空格,并将环境后面的第一行改为REDIS\u URL,就可以解决这个问题=redis://cache
多亏了@ozlevka尝试删除REDIS_URL=REDIS中的空格看起来REDIS connection正在忽略您的env变量并尝试连接到localhost。可以从节点脚本调试env var的值吗?(另外,请在您的问题中添加输出,而不仅仅是在标题中)尝试有效的redis URL,如
redis://redis:6379
@zigarn删除多余的空格后,我记录了env变量REDIS_URL,并根据上面给出的代码将输出显示为“REDIS”。@ozlevka感谢您的建议,成功了。请尝试在REDIS\u URL=REDIS中删除空格。看起来REDIS connection正在忽略您的env变量并尝试连接到localhost。可以从节点脚本调试env var的值吗?(另外,请在您的问题中添加输出,而不仅仅是在标题中)尝试有效的redis URL,如redis://redis:6379
@zigarn删除多余的空格后,我记录了env变量REDIS_URL,并根据上面给出的代码将输出显示为“REDIS”。@ozlevka感谢您的建议,我在docker-compose.yml文件中替换了您的代码后,出现了以下错误。RangeError:redis url必须以斜杠“/”开头,或在redis url后面包含斜杠protocol@ANKUSHKUMAR现在试试,谢谢你的帮助,终于成功了。问题在于@ozlevka建议的空间。网络模式:“主机”
通常会禁用Docker的网络设置。这并不仅仅是为了连接容器。@DavidMaze是的,这是真的。。我建议他这样做,因为他办不到。我将从答案中删除主体部分。。感谢您指出,在我替换docker-compose.yml文件中的代码后,出现了以下错误。RangeError:redis url必须以斜杠“/”开头,或在redis url后面包含斜杠protocol@ANKUSHKUMAR现在试试,谢谢你的帮助,终于成功了。问题在于@ozlevka建议的空间。网络模式:“主机”
通常会禁用Docker的网络设置。这并不仅仅是为了连接容器。@DavidMaze是的,这是真的。。我建议他这样做,因为他办不到。我将从答案中删除主体部分。。谢谢你指出这一点