docker - 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.
解决方案
推荐阅读
- sas - SAS按ID输出每个最大值
- python-3.x - 试图将列表的内容写入 xml
- gremlin - 是否有 Gremlin NULL 关键字或类似的不是遍历步骤的东西?
- java - 如何在定义的持续时间后停止执行 Java 中的步骤
- aws-lambda - 调用 lambda 函数处理程序 java
- jenkins - Bitbucket cloud webhook 不触发 Jenkins Build:无分支信息
- r - 如何在年龄金字塔图中填写缺失的年龄?
- python - 如何从 column_name != some_value 的数据库中查找记录?
- python - If 语句简单
- types - 给定一个类型,如何找到我需要实现的所有功能