Docker构建镜像未安装Supervisor且运行时启动崩溃问题求助
问题修复方案
核心故障点及解决方法
- 缺失PHP运行环境
当前使用的ubuntu:latest基础镜像仅安装了Supervisor,未安装PHP CLI及Laravel依赖的PHP扩展(如mbstring、xml、curl、redis等),导致php artisan queue:listen执行时找不到php命令,直接返回exit status 1。 - Laravel项目未部署、工作目录配置错误
Supervisor配置中worker的工作目录设置为/tmp/,且Dockerfile中没有复制Laravel项目代码到容器内的步骤,artisan入口文件不存在,命令执行直接失败。 - Supervisor安装异常
如果进入容器发现Supervisor未安装,大概率是镜像构建阶段apt install -y supervisor步骤执行失败,通常是Ubuntu官方源网络不稳定导致,可在apt更新前替换为国内镜像源解决。 - Dockerfile配置冗余冲突
先通过sed命令修改默认supervisord.conf添加nodaemon参数,随后又用自定义配置覆盖该文件,之前的sed操作完全无效,属于冗余配置。
修正后的配置示例
Dockerfile
FROM ubuntu:latest # 替换为国内阿里云源,解决apt安装失败问题,不需要可删除该行 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \ apt-get update && \ # 安装Supervisor + PHP及Laravel所需扩展,可根据项目需求调整PHP版本和扩展 apt-get install -y supervisor php8.1-cli php8.1-mbstring php8.1-xml php8.1-curl php8.1-redis && \ rm -rf /var/lib/apt/lists/* # 创建Laravel项目存放目录 RUN mkdir -p /var/www/laravel # 复制本地Supervisor配置到容器 COPY supervisord.conf /etc/supervisor/supervisord.conf # 复制本地Laravel项目代码到容器内,注意替换左侧为你本地的Laravel项目路径 COPY ./local-laravel-project /var/www/laravel CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]
supervisord.conf
[supervisord] logfile=/var/log/supervisor/supervisord.log pidfile=/var/run/supervisord.pid user=root nodaemon=true [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php artisan queue:listen --queue=queue1,queue2,queue3 directory=/var/www/laravel autostart=true autorestart=true numprocs=3 # 直接设置为3即可启动3个进程,不需要单独写3份配置 stopwaitsecs=10800
注:如果需要3个处理不同队列的独立进程,可复制3份
[program:laravel-worker]块,分别命名为laravel-worker-queue1、laravel-worker-queue2等,各自修改command中的--queue参数即可。
排错验证步骤
- 镜像构建完成后先启动容器进入交互模式,验证环境是否正常:
docker run --rm -it 你的镜像名称 bash - 容器内执行
php -v确认PHP安装正常,执行cd /var/www/laravel && php artisan --version确认Laravel项目文件正常 - 若worker仍启动失败,查看子进程日志排查具体报错:
cat /var/log/supervisor/laravel-worker-*.log
内容的提问来源于stack exchange,提问作者MAWhiteStore
相关产品推荐
相关产品推荐

