【问题标题】:Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379
【发布时间】:2017-05-16 14:46:03
【问题描述】:

我正在尝试允许我的 nodeJs docker 映像与我的 redis docker 映像(Mac OS X 环境)之间进行通信:

nodeJs Dockerfile:

FROM node:4.7.0-slim
EXPOSE 8100
COPY . /nodeExpressDB
CMD ["node", "nodeExpressDB/bin/www"]

redis Dockerfile:

FROM ubuntu:14.04.3
EXPOSE 6379
RUN apt-get update && apt-get install -y redis-server

nodeJs 尝试连接 redis 的代码是:

var redis = require('redis');
var client = redis.createClient();

docker 构建步骤:

docker build -t redis-docker .
docker build -t node-docker .

docker run images 步骤流程:

docker run -p 6379:6379 redis-docker
docker run -p 8100:8100 node-docker

错误:

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at Object.exports._errnoException (util.js:907:11)
    at exports._exceptionWithHostPort (util.js:930:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1078:14)

我应该怎么做才能从 node-docker 连接到 Redis?

【问题讨论】:

  • 使用 --name redis 运行 redis 并连接到 redis:6379
  • 谢谢,我试过了:"docker run --name redis-docker -d redis-docker" 但得到了同样的错误
  • 你能从redis-cli连接redis吗?
  • 是的,通过 redis-cli 可以正常工作

标签: node.js macos docker redis docker-image


【解决方案1】:

在节点中连接时,在传递服务器IP的函数参数中使用redis-docker

【讨论】:

  • @OronBen-David 而不是 127.0.0.1 连接到 redis-docker
【解决方案2】:

Redis 在单独的容器中运行,该容器具有单独的虚拟以太网适配器和运行节点应用程序的容器的 IP 地址。您需要 link 这两个容器或为它们创建一个 user defined network

docker network create redis
docker run -d --net "redis" --name redis redis
docker run -d -p 8100:8100 --net "redis" --name node redis-node

然后在node中连接时指定主机redis,这样redis客户端就会尝试连接redis容器,而不是默认的localhost

const redis = require('redis')
const client = redis.createClient(6379, 'redis')
client.on('connect', () => console.log('Connected to Redis') )

Docker Compose 可以帮助定义多容器设置。

version: '2'
services:
  node:
    build: .
    ports:
    - "8100:8100"
    networks:
    - redis
  redis:
    image: redis
    networks:
    - redis
networks:
  redis:
    driver: bridge

【讨论】:

  • 谢谢,我不再报错了,但现在使用端口 8100 在浏览器中看不到任何内容,我会检查并更新
  • 当然,我忘记链接了!
【解决方案3】:

如果安装了redis然后运行命令

sudo apt-get install redis-server

然后您将让您的网站运行。

【讨论】:

    【解决方案4】:

    您还可以更改 /etc/hosts 文件以更新 redis 容器的 dockerip。

    使用 docker inspect 查找 docker ip

    【讨论】:

      【解决方案5】:
      1. 下载redis服务器。
      2. 运行 redis 服务器。
      3. 然后运行您的项目。

      它应该可以正常工作。这是下载链接:

      Github - Redis Download Packages

      我希望它有效。

      【讨论】:

        【解决方案6】:

        解决方案

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

        然后用 => docker-compose up --build

        重建你的 docker

        【讨论】:

          【解决方案7】:

          如果可以新建redis docker实例,尝试将容器端口映射到主机:

          docker run --name some-redis -p 6379:6379 -d redis
          
          docker container start some-redis
          

          现在,您可以启动容器并连接主机 127.0.0.1

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

          【讨论】:

            猜你喜欢
            • 2017-07-06
            • 2020-08-27
            • 2023-03-18
            • 1970-01-01
            • 2019-01-03
            • 2022-08-21
            • 2020-07-20
            • 2021-03-14
            • 1970-01-01
            相关资源
            最近更新 更多