我必须在 Laravel 应用程序中使用 Socketio 配置 Redis。但是,到目前为止我尝试过什么,我都会遇到同样的错误:
连接被拒绝 [tcp://127.0.0.1:6379] i
我可以使用 docker exec -it id sh 进入容器,当我 ping 服务器时,我收到 PONG 消息。客户端已经是我的database.php 文件中的“predis”,并且也安装了软件包。
.env
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
docker-compose.yml
version: "2"
services:
api:
build: .
ports:
- 9000:9000
volumes:
- .:/app
- /app/vendor
depends_on:
- postgres
- redis
environment:
DATABASE_URL: postgres://xx@postgres/xx
postgres:
image: postgres:latest
environment:
POSTGRES_USER: xx
POSTGRES_DB: xx
POSTGRES_PASSWORD: xx
volumes:
- .Data:/var/lib/postgresql/data
ports:
- 3306:5432
redis:
build: ./Redis/
ports:
- 6003:6379
volumes:
- ../RedisData/data:/data
command: redis-server --appendonly yes
Dockerfile(redis)
FROM redis:alpine
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
错误表明它可以连接到端口
127.0.0.1
上的 6379
。所以请确保主机和端口没问题:
主机 127.0.0.1 没问题:如果您在与 redis 相同的主机上运行 php,或者如果您在 Docker 主机上运行 php,则此工作正常,但在这种情况下,端口将是
6003
端口6379可以:主机不好,必须指定Docker容器主机名:
redis
确保配置缓存正常
将 REDIS_HOST 设置为 redis,如下所示 REDIS_HOST=redis。原因是您已经构建了 docker 文件并指定了 redis 作为您的 redis 服务的名称
有同样的问题...
还在 redis.conf
中更新了以下内容bind 127.0.0.1
至
bind redis
因为 redis 现在是现有主机
如果您在
networks
中定义了 docker-compose.yml
,还要确保所有服务(Laravel 和 Redis)都在同一网络中。
networks:
internal:
driver: bridge
然后:
app:
[cut]
networks:
- internal
redis:
image: redis:alpine
volumes:
- ./docker/volumes/redis:/data
ports:
- "6379:6379"
networks:
- internal
以便缓存可以与您的应用程序对话。