Node.js Docker Nodejs Redis与127.0.0.1:6379的连接失败

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

我想在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: ./
  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是的,这是真的。。我建议他这样做,因为他办不到。我将从答案中删除主体部分。。谢谢你指出这一点