node.js - 使用 docker-compose 时, Node 应用程序无法连接到 Redis

标签 node.js docker redis docker-compose

我正在运行 Ubuntu 并尝试为 Node 应用设置开发环境,这是我的 docker-compose.yml:

version: "2"
services:
  redis:
    image: redis
    ports:
     - "6381:6379"
    volumes:
      - /var/lib/thinklog-queue:/data
  activity-service:
    build:
      context: ./activity-service
    command: yarn dev
    ports:
      - "3001:3001"
    environment:
      REDIS_QUEUE_URL: "redis://redis:6381"
    depends_on:
      - redis

Node 应用程序的 Dockerfile 如下所示:

FROM node:9
WORKDIR /app
COPY package.json ./
COPY yarn.lock ./
RUN yarn install
COPY . .
EXPOSE 4000
CMD ["yarn", "start"]

我从 env 变量扩展 Redis 连接字符串。

当我在日志中运行 docker-compose build && docker-compose up 时,我从 Node 应用程序得到了这个输出:

activity-service_1 | Error: Redis connection to redis:6381 failed - connect ECONNREFUSED 172.20.0.2:6381

看起来设置是正确的,但是有一些东西阻止了与 Redis 的实习生连接。 (在这个 docker compose 网络中)

从外部连接到这个 Redis 实例,例如其他 shell session 工作正常:

kuno@dell:~/code/THINKLOG/activity-service$ redis-cli -p 6381
127.0.0.1:6381> ping
PONG

我还尝试像这样安装自定义配置(在 docker-compose.yml 中为 Redis 的卷数组添加了新项目):

  - ./redis.conf:/usr/local/etc/redis/redis.conf

已将绑定(bind)行注释掉并将其修改为这样(最后一个地址是 docker-compose 内部使用的地址):

bind 192.168.1.100 10.0.0.1 172.20.0.2

我是否还应该挂载自定义 Redis 配置并将 Redis 配置为允许在 docker 网络内进行连接?

最佳答案

在 url REDIS_QUEUE_URL: "redis://redis:6379" 中将端口更改为 6379 6381 是主机 IP 上的端口而不是 redis 容器端口。

关于node.js - 使用 docker-compose 时, Node 应用程序无法连接到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958399/

相关文章:

docker - 没有足够的熵来支持在 boot2docker 中运行的 docker 容器中的/dev/random

memory - Redis内存使用、ZSET和docker

replace - 仅使用 Redis 而不是 RDBMS 的缺点是什么?

Magento Redis 配置问题 : Cannot find named PHP session module (redis)

javascript - 通过 $ionicActionSheet.show() 在 ionic 中打开文件资源管理器

javascript - 在 Node.js 中,我如何与客户端 JavaScript 进行通信?

javascript - 指示本地模拟的 Firebase 函数使用身份验证模拟器

javascript - nodejs - 奇怪的 "Can' t 在发送后设置 header “案例

docker - 在现有奴隶上使用 docker 的 Jenkins 管道

node.js - Passport.js 在 Firefox 上不持久