使用docker-compose时,节点应用程序无法连接到Redis

时间:2018-06-20 23:26:52

标签: node.js docker redis docker-compose

我正在运行Ubuntu,并尝试为节点应用设置开发环境,这是我的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

和节点应用程序的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时,我从节点应用程序获得以下输出:

  

activity-service_1 |错误:Redis与Redis的连接:6381失败-   连接ECONNREFUSED 172.20.0.2:6381

似乎设置正确,但是有一些东西阻止了到Redis的内部连接。 (在该Docker组成网络内部)

从外部到此Redis实例的连接,例如其他shell会话工作正常:

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

已注释掉绑定行并对其进行修改(如下所示)(最后一个地址是docker-compose在内部使用的地址):

bind 192.168.1.100 10.0.0.1 172.20.0.2

我还应该安装自定义Redis配置并将Redis配置为允许docker网络内的连接吗?

1 个答案:

答案 0 :(得分:1)

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