Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 错误:到127.0.0.1:6379的Redis连接失败-连接到127.0.0.1:6379_Node.js_Macos_Docker_Redis_Docker Image - Fatal编程技术网

Node.js 错误:到127.0.0.1:6379的Redis连接失败-连接到127.0.0.1:6379

Node.js 错误:到127.0.0.1:6379的Redis连接失败-连接到127.0.0.1:6379,node.js,macos,docker,redis,docker-image,Node.js,Macos,Docker,Redis,Docker Image,我正在尝试允许我的nodeJs docker映像与我的redis docker映像(Mac OS X环境)之间的通信: nodeJs Dockerfile: FROM node:4.7.0-slim EXPOSE 8100 COPY . /nodeExpressDB CMD ["node", "nodeExpressDB/bin/www"] FROM ubuntu:14.04.3 EXPOSE 6379 RUN apt-get update && apt-get install

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

nodeJs Dockerfile:

FROM node:4.7.0-slim
EXPOSE 8100
COPY . /nodeExpressDB
CMD ["node", "nodeExpressDB/bin/www"]
FROM ubuntu:14.04.3
EXPOSE 6379
RUN apt-get update && apt-get install -y redis-server
redis Dockerfile:

FROM node:4.7.0-slim
EXPOSE 8100
COPY . /nodeExpressDB
CMD ["node", "nodeExpressDB/bin/www"]
FROM ubuntu:14.04.3
EXPOSE 6379
RUN apt-get update && apt-get install -y redis-server
尝试连接到redis的nodeJs代码为:

var redis = require('redis');
var client = redis.createClient();
docker构建步骤:

docker build -t redis-docker .
docker build -t node-docker .
docker运行图像步骤流程:

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,我应该怎么做?

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

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

然后在节点中连接时指定主机
redis
,以便redis客户端尝试连接到
redis
容器,而不是默认的
localhost

const redis = require('redis')
const client = redis.createClient(6379, 'redis')
client.on('connect', () => console.log('Connected to Redis') )
可以帮助定义多容器设置

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

如果安装了redis,则运行命令

sudo apt get安装redis服务器


然后您将运行您的站点。

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

使用docker inspect查找docker ip

  • 下载redis服务器
  • 运行redis服务器
  • 然后运行您的项目
  • 它应该很好用。以下是下载链接:


    我希望它能起作用。

    解决方案

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

    然后使用=>docker compose-up重新生成您的docker--build

    如果您可以创建新的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'
    });
    

    使用--name redis运行redis并连接到redis:6379谢谢,我尝试过:“docker run--name redis docker-d redis docker”,但遇到同样的错误您是否能够从
    redis cli
    连接
    redis
    ?可以通过redis cli连接fine@OronBen-David不是127.0.0.1连接到redis DockerTanks,而是我不再收到错误,但是现在使用端口8100在浏览器中看不到任何东西,我将检查并更新安全,我忘记了链接!