5

我正在尝试允许我的 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 Docker 文件:

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 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?

4

7 回答 7

9

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

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
于 2017-01-02T14:06:08.280 回答
1

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

sudo apt-get install redis-server

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

于 2017-06-01T07:28:04.830 回答
1

解决方案

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

然后用 => docker-compose up --build重建你的 docker

于 2020-10-03T12:34:59.400 回答
0

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

于 2017-01-02T13:56:49.450 回答
0

如果您可以创建一个新的 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'
});
于 2021-04-16T14:53:15.670 回答
-1

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

使用 docker inspect 查找 docker ip

于 2017-11-16T05:47:26.817 回答
-2
  1. 下载redis服务器。
  2. 运行 redis 服务器。
  3. 然后运行你的项目。

它应该工作得很好。这是下载链接:

Github - Redis 下载包

我希望它有效。

于 2018-09-12T12:45:35.440 回答