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

Docker部署PHP8.1+Laravel9时Supervisor权限错误解决求助

解决Docker容器中Supervisor启动的PermissionError问题

在PHP8.1+Laravel9的Docker容器中安装Supervisor时,遇到以下权限错误:

PermissionError: [Errno 13] Permission denied: '/var/log/supervisor/supervisord.log'

现有配置文件

supervisor.conf

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
stopwaitsecs=3600
stdout_logfile_maxbytes=5MB

PHP Dockerfile

FROM php:8.1.13-fpm

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        nano \
        libxslt1.1 \
        libxslt1-dev \
        unzip \
        git \
        gnupg \
        libpq-dev \
        libzip-dev \
        iputils-ping \
        supervisor \
    && docker-php-ext-install zip \
    gd \
    mysqli pdo pdo_mysql  \
    && docker-php-ext-enable pdo_mysql \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-configure intl 
    
RUN echo "memory_limit='512M'" >> /usr/local/etc/php/conf.d/php-extra.ini;

ENV PHP_IDE_CONFIG "serverName=new_app"

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=2.3.8 && chmod +x /usr/bin/composer

# Set timezone
RUN rm /etc/localtime \
    && ln -s /usr/share/zoneinfo/Europe/Warsaw /etc/localtime \
    && "date" \
    && printf '[PHP]\ndate.timezone = "Europe/Warsaw"\n' > /usr/local/etc/php/conf.d/tzone.ini 

RUN usermod -aG docker $USER
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

WORKDIR /var/www/html

解决步骤

错误原因是Supervisor默认日志目录/var/log/supervisor/的权限不足,容器运行用户无写入权限,可通过以下方式解决:

方法1:创建日志目录并设置权限

在Dockerfile中添加命令,创建Supervisor日志目录并将权限赋予php-fpm默认运行用户www-data:

# 创建Supervisor日志目录并设置权限
RUN mkdir -p /var/log/supervisor && chown -R www-data:www-data /var/log/supervisor

方法2:修改Supervisor主配置,指定可写日志路径

自定义Supervisor主配置,将日志路径改为Laravel的storage目录(该目录通常已配置好www-data权限):

  1. 在Dockerfile中复制自定义主配置:
# 复制自定义Supervisor主配置
COPY supervisord-main.conf /etc/supervisor/supervisord.conf
# 复制Laravel Worker配置
COPY supervisord.conf /etc/supervisor/conf.d/laravel-worker.conf
  1. 创建supervisord-main.conf文件,修改日志路径及运行用户:
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisord]
logfile=/var/www/html/storage/logs/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/var/run/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
user=www-data

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisor/conf.d/*.conf

方法3:以root用户运行Supervisor(不推荐)

若临时测试,可在Dockerfile中切换到root用户启动Supervisor,但生产环境不建议使用:

USER root
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:18:24