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

WSL2中DDEV启动时自动运行Symfony Messenger Worker的问题

解决DDEV中Symfony Messenger Worker容器启动报错问题

问题背景

在WSL2环境中通过DDEV运行Symfony项目,需要实现ddev start时自动启动Messenger Worker。手动启动Worker的命令为:

ddev exec bin/console messenger:consume async_send_data

尝试创建docker-compose-blablabla.yaml添加额外容器,配置如下:

services:
  dataupdate-worker:
    container_name: ddev-${DDEV_SITENAME}-dataupdate-worker
    image: ${DDEV_WEBIMAGE}
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
    command: ["exec", "bin/console", "messenger:consume", "async_send_data", "--limit=0"]
    depends_on:
      - redis
    healthcheck:
      test: ["CMD-SHELL", "ps aux | grep '[m]essenger:consume' || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3

启动后报错,日志显示:

"Could not open input file: bin/console"

问题原因

  1. 未挂载项目代码目录:额外容器没有挂载本地项目代码,导致容器内找不到bin/console文件
  2. 命令错误:使用了exec命令,这是DDEV的外部命令,容器内部无需该指令,直接执行bin/console即可
  3. 工作目录未指定:容器默认工作目录不是项目根目录,执行bin/console时路径不正确

解决方案

替换原有docker-compose-blablabla.yaml内容为以下配置:

services:
  dataupdate-worker:
    container_name: ddev-${DDEV_SITENAME}-dataupdate-worker
    image: ${DDEV_WEBIMAGE}
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
    # 挂载本地项目代码到容器默认的项目路径
    volumes:
      - type: bind
        source: ${DDEV_APPROOT}
        target: /var/www/html
    # 指定容器工作目录为项目根目录
    working_dir: /var/www/html
    # 直接执行Symfony console命令,移除不必要的exec
    command: ["bin/console", "messenger:consume", "async_send_data", "--limit=0"]
    depends_on:
      - redis
    healthcheck:
      test: ["CMD-SHELL", "ps aux | grep '[m]essenger:consume' || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3

关键修改说明

  • volumes挂载:将本地项目目录绑定到容器的/var/www/html,与DDEV web容器保持一致,确保容器能访问项目代码
  • working_dir设置:指定工作目录为项目根,避免路径错误
  • command调整:移除exec,直接运行bin/console命令,符合容器内执行逻辑

验证步骤

  1. 保存修改后的配置文件
  2. 执行ddev restart重启项目
  3. 查看worker容器日志:ddev logs -s dataupdate-worker,确认无报错
  4. 检查worker进程状态:ddev exec -s dataupdate-worker ps aux | grep messenger:consume,确认进程正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:07:11