node.js - Node 无法通过 Docker Compose 连接到 Redis

标签 node.js reactjs amazon-web-services redis docker-compose

我正在通过 docker compose 在 Node 和 Redis 上运行 React 应用程序:

version: "3"
services:
  webapp:
    build: ./
    ports:
      - "127.0.0.1:3000:9090"
    depends_on:
      - redis
    command:
      npm run start

  nginx:
    build: ./nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=127.0.0.1
      - NGINX_PORT=80
    command:
      service nginx start

  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - ./data:/data

Docker 文件:

FROM node:alpine

WORKDIR /usr/src/app

COPY package.json ./

RUN npm install
COPY . .

EXPOSE 9090
RUN npm run build_prod

服务器.js:

const redisClient = RedisClient.createClient(6379,'redis');

当我运行 docker-compose up --build 时,我收到 Redis 连接被拒绝的错误:

redis_1   | 1:M 15 Nov 13:55:19.865 * Ready to accept connections
webapp_1  |
webapp_1  | > web.globalmap.fatmap.com@0.0.1 start /usr/src/app
webapp_1  | > node ./build/server.js
webapp_1  |
webapp_1  | events.js:193
webapp_1  |       throw er; // Unhandled 'error' event
webapp_1  |       ^
webapp_1  |
webapp_1  | Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
webapp_1  |     at Object._errnoException (util.js:1031:13)
webapp_1  |     at _exceptionWithHostPort (util.js:1052:20)
webapp_1  |     at TCPConnectWrap.afterConnect [as oncomplete]

我想知道如何让 docker 正确链接两个容器。

最佳答案

看起来 redis 没有解析到正确的 IP 地址。

在创建客户端时尝试使用 redis URI。

// [redis:]//[[user][:password@]][host][:port][/db-number][?db=db-number[&password=bar[&option=value]]]
const redisClient = RedisClient.createClient('redis://redis:6379');

如果合适,请提供用户名、密码和数据库编号。

关于node.js - Node 无法通过 Docker Compose 连接到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47309643/

相关文章:

reactjs - Enzyme/Jest onSubmit 不调用提交函数

javascript - 比较哈希值

mongodb - node.js: 带有 Mongoose 的 expressjs

javascript - react Hook : what is best practice for wrapping multiple instances of a hook with a single hook?

amazon-web-services - 使用 OAuth 放大 withAuthenticator v/s

amazon-web-services - 具有分段上传功能的适用于 Linux 的 AWS S3 客户端

python - AWS EC2连续运行Python程序一个月

node.js - 使用 Node.js 和 Passport 进行身份验证后,如何使用用户 ID 将用户重定向到主页?

javascript - 我需要担心 Node.js 中的并发修改吗?

html - 如何在 css 中获得 5 x 5 的网格?