无法从 Laravel 应用程序连接到 Redis

问题描述 投票:0回答:4

我必须在 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" ]
docker redis
4个回答
13
投票

错误表明它可以连接到端口

127.0.0.1
上的
6379
。所以请确保主机和端口没问题:

  • 主机 127.0.0.1 没问题:如果您在与 redis 相同的主机上运行 php,或者如果您在 Docker 主机上运行 php,则此工作正常,但在这种情况下,端口将是

    6003

  • 端口6379可以:主机不好,必须指定Docker容器主机名:

    redis

  • 确保配置缓存正常


1
投票

将 REDIS_HOST 设置为 redis,如下所示 REDIS_HOST=redis。原因是您已经构建了 docker 文件并指定了 redis 作为您的 redis 服务的名称


0
投票

有同样的问题...

还在 redis.conf

中更新了以下内容
bind 127.0.0.1 

bind redis

因为 redis 现在是现有主机


0
投票

如果您在

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

以便缓存可以与您的应用程序对话。

© www.soinside.com 2019 - 2024. All rights reserved.