首页 > 解决方案 > Docker-compose、Laravel-echo-server 和 Redis 连接问题:[ioredis] 未处理的错误事件:错误:连接 ECONNREFUSED 172.20.0.2:6379

问题描述

我正在使用 PHP、PostgreSQL、Nginx、Laravel-Echo-Server 和 Redis 设置一个 docker 堆栈,并且在 Redis 和 echo-server 连接方面遇到了一些问题。我正在使用 docker-compose.yml:

version: '3'

networks:
  app-tier:
    driver: bridge
services:
  app:
    build:
      context: .
      dockerfile: .docker/php/Dockerfile
    networks:
      - app-tier
    ports:
      - 9002:9000
    volumes:
      - .:/srv/app
  nginx:
    build:
      context: .
      dockerfile: .docker/nginx/Dockerfile
    networks:
      - app-tier
    ports:
      - 8080:80
    volumes:
      - ./public:/srv/app/public
  db:
    build:
      context: .docker/postgres/
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      - app-tier
    ports:
      - 5433:5432
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: secret
    volumes:
      - .docker/postgres/data:/var/lib/postgresql/data
  laravel-echo-server:
    build:
      context: .docker/laravel-echo-server
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      - app-tier
    ports:
      - 6001:6001
    links:
      - 'redis:redis'
  redis:
    build:
      context: .docker/redis
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      - app-tier
    volumes:
      - .docker/redis/data:/var/lib/redis/data

我的回声服务器 Dockerfile:

FROM node:10-alpine

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/

RUN apk add --update \
    python \
    python-dev \
    py-pip \
    build-base

RUN npm install

COPY laravel-echo-server.json /usr/src/app/laravel-echo-server.json

EXPOSE 3000
CMD [ "npm", "start" ]

Redis Docker 文件:

FROM redis:latest

LABEL maintainer="maintainer"

COPY . /usr/src/app
COPY redis.conf /usr/src/app/redis/redis.conf

VOLUME /data

EXPOSE 6379

CMD ["redis-server", "/usr/src/app/redis/redis.conf"]

我的 laravel-echo-server.json:

{
    "authHost": "localhost",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "redis"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": ""
}

redis.conf 现在是默认的。我从 laravel-echo-server 得到的错误是:

[ioredis] Unhandled error event: Error: connect ECONNREFUSED 172.20.0.2:6379 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1163:14)

Redis 启动并运行良好,使用配置文件并准备好接受连接。docker ps显示 redis 和 echo-server 都已启动,因此它们只是没有按照错误指示进行连接。如果我将 Redis Dockerfile 中的最后一行更改为CMD ["redis-server"]似乎连接并自动使用默认配置(与我的 .docker 目录中的配置相同),但我收到此错误:Possible SECURITY ATTACK detected. It looks like somebody is sending POST or Host: commands to Redis. This is likely due to an attacker attempting to use Cross Protocol Scripting to compromise your Redis instance. Connection aborted.

标签: dockerredisconfigurationdocker-composelaravel-echo

解决方案


推荐阅读