节点无法通过Docker Compose连接Redis

7

我正在通过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

Server.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容器链接起来。
3个回答

14

看起来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');

提供用户名、密码和数据库编号(如果适用)。


8
这解决了我的问题,让 node 在使用 docker-compose.yml 连接到 redis 时无法连接的情况得以解决。
const redis_client = redis.createClient({host: 'redis'});

然后,在我的docker-compose.yml文件中,我有以下内容。
version: '3'

services:
  redis:
    image: redis
  socket:
    container_name: socket
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - redis
    links:
      - redis

来源:https://github.com/docker-library/redis/issues/45

这个问题是关于在Docker Redis容器中使用Lua脚本时的一个错误。当使用evalsha命令运行Lua脚本时,会出现“NOSCRIPT No matching script. Please use EVAL.”错误。错误的原因是Redis容器没有持久化保存该脚本。解决方法是将脚本添加到容器中,并执行相应的load命令。

0

我使用process.env.访问docker环境变量时没有发现任何问题。

我已经在docker-compose.yml文件中声明了该变量。

version: '3.7'

services:
  api:
    build: .
    container_name: api-framework
    depends_on:
        - redis
    ports:
      - 8080:6002
    networks:
      - fronted
      - backend
    environment:
      redis_server_addr: redis
  redis:
    container_name: my-redis
    image: "redis:5"
    ports:
      - 6379
    networks:
      - backend

然后,配置文件有以下行。

redis_host: process.env.redis_server_addr

这对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接