You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker本地开发环境中Laravel Horizon任务Pending未执行问题

问题:Laravel Horizon队列任务始终处于Pending状态(Docker环境)

本地Docker环境配置Laravel Horizon+Redis队列后,Horizon面板可正常访问,但提交的队列任务一直处于Pending状态无法执行。执行php artisan horizon无效,但php artisan horizon:work能处理所有Pending任务。

相关配置文件

docker-compose.yml

version: '3.1'

services:
  app:
    build: .
    container_name: app
    restart: always
    tty: true
    ports:
      - "80:80"
    working_dir: /var/www
    volumes:
      - ./code:/var/www
      - data:/var/run/php
    depends_on:
      - redis
    networks:
      - app-network

  redis:
    container_name: redis
    hostname: redis
    image: redis:alpine
    restart: unless-stopped
    volumes:
      - data:/.data
    networks:
      - app-network

  queue:
    container_name: queue
    hostname: queue
    image: redis:alpine
    restart: unless-stopped
    volumes:
      - data:/.data
    networks:
      - app-network

volumes:
  data:
networks:
  app-network:
    driver: bridge

.env

APP_NAME="Laravel"
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=password

BROADCAST_DRIVER=log
CACHE_DRIVER=redis
FILESYSTEM_DISK=local
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=120

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

QUEUE_DRIVER=redis
REDIS_QUEUE=queue
REDIS_QUEUE_HOST=queue

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

horizon.php(关键片段)

'defaults' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'auto',
            'autoScalingStrategy' => 'time',
            'maxProcesses' => 10,
            'maxTime' => 0,
            'maxJobs' => 0,
            'memory' => 128,
            'tries' => 1,
            'timeout' => 60,
            'nice' => 0,
        ],
    ],

    'environments' => [
        'production' => [
            'supervisor-1' => [
                'maxProcesses' => 10,
                'balanceMaxShift' => 1,
                'balanceCooldown' => 3,
            ],
        ],

        'local' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'queue' => ['default'],
                'balance' => 'auto',
                'autoScalingStrategy' => 'time',
                'maxProcesses' => 10,
                'maxTime' => 0,
                'maxJobs' => 0,
                'memory' => 128,
                'tries' => 1,
                'timeout' => 60,
                'nice' => 0,
            ],
        ],
    ],

修复方案

1. 移除多余的Redis容器

docker-compose.yml中queue服务是冗余的Redis实例,和redis服务冲突,直接删除该服务:
修改后的docker-compose.yml相关部分:

services:
  app:
    # ... 原有配置不变
    depends_on:
      - redis
    networks:
      - app-network

  redis:
    container_name: redis
    hostname: redis
    image: redis:alpine
    restart: unless-stopped
    volumes:
      - data:/.data
    networks:
      - app-network

# 移除queue服务

2. 统一Redis队列配置(修正.env)

.env中存在冲突的Redis队列配置,REDIS_QUEUE_HOST是无效配置,且REDIS_QUEUE=queue和Horizon监听的default队列不匹配,修改如下:

# 删除无效的REDIS_QUEUE_HOST=queue
# 将REDIS_QUEUE改为Horizon监听的队列名称
REDIS_QUEUE=default

# 保留QUEUE_CONNECTION=redis,删除过时的QUEUE_DRIVER(Laravel 5.7+已废弃)

3. 确保Horizon在App容器内运行

执行php artisan horizon时,必须进入app容器内部执行,而不是宿主机:

# 进入app容器
docker exec -it app bash

# 在容器内启动Horizon
php artisan horizon

4. 重启相关服务并清除缓存

修改配置后,重启Docker服务并清除Laravel配置缓存:

# 重启Docker容器
docker-compose down && docker-compose up -d

# 进入app容器清除缓存
docker exec -it app php artisan config:clear
docker exec -it app php artisan cache:clear

5. 验证Horizon进程状态

启动Horizon后,检查容器内的进程是否正常运行:

docker exec -it app ps aux | grep horizon

如果看到Horizon相关进程,说明启动成功,此时提交队列任务应该能被正常处理。


内容的提问来源于stack exchange,提问作者ALTELMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:25:23