“Docker redis 错误”:连接 ECONNREFUSED 127.0.0.1:6379

时间:2021-04-23 16:54:10

标签: docker

###############

Docker 文件

###############

FROM node:alpine

WORKDIR '/app'

COPY package.json .

RUN yarn

COPY . .

CMD ["yarn","run","start"]

###################

docker-compose.yml

###################

version: '3'

services:

  redis-server:

    image: 'redis'

  node-app:

    build: .
    
    ports:
    
     - "8081:8081"

---------------------------app.js----------------- --------------

const express = require('express');

const redis = require('redis');

const app = express();

const client = redis.createClient({
  host:'localhost',
  port: 6379
});

client.set('visits', 0);

app.get('/', (req, res) => { client.get('visits', (err, visits) => { res.send('Number of visits is ' + visits); client.set('visits', parseInt(visits) + 1); }); });

app.listen(8081, () => { console.log('Listening on port 8081'); });

################################

错误信息

################################

<块引用>

节点:事件:346 扔er; // 未处理的“错误”事件 ^

错误:连接 ECONNREFUSED 127.0.0.1:6379

1 个答案:

答案 0 :(得分:0)

正如我从 app.js 代码中看到的,您试图通过使用 localhost 从另一个 docker 容器访问一个 docker 容器,这是错误的。 Docker-compose 为您的服务创建一个网络,并默认为它们提供与服务名称相同的主机名。您可以参考 docker compose networking documentation 了解更多详情。

因此,您应该通过 redis-server 主机而不是 localhost 从您的应用访问 redis 服务。

此外,您的 docker-compose 文件中没有暴露的 redis 端口。它应该看起来像

version: '3'
services:
  redis-server:
   image: 'redis'
     - "6379:6379"
  node-app:
   build: .
   ports:
     - "8081:8081"

并且您的应用程序应该在下一步创建 redis 连接:

const client = redis.createClient({ host:'redis-server', port: 6379 });
相关问题