RockyLinux+PHP+Apache容器报503 Service Unavailable错误解决方法
503错误根因
Rocky Linux 官方源提供的php包默认采用php-fpm(FastCGI进程管理器)模式运行,Apache安装对应PHP相关组件后会自动生成反向代理配置,把.php结尾的请求转发给本地监听的php-fpm服务处理。
你的镜像启动时仅启动了Apache进程,没有启动php-fpm服务,Apache无法连接到后端PHP解析进程,就会直接返回503 Service Unavailable错误。
可行修复步骤
- 第一步:快速验证问题
启动容器后进入容器内部,执行以下命令手动启动php-fpm,再刷新访问页面:
注意:容器环境默认没有运行systemd守护进程,不要用php-fpmsystemctl start php-fpm启动,直接执行php-fpm二进制即可。启动后执行ps aux | grep php-fpm能看到fpm的master和worker进程即为启动成功。
如果此时页面访问恢复正常,即可确认是php-fpm未启动导致的问题。 - 第二步:修正Dockerfile配置
你当前的Dockerfile存在两个可优化/修复点:一是启动命令未包含php-fpm启动逻辑,二是不需要手动创建/run/php-fpm目录,php-fpm启动时会自动生成该目录及所需的Unix套接字文件。
修正后的参考Dockerfile如下:RUN dnf update -y && \ dnf install -y httpd php procps net-tools findutils vim git && \ dnf clean all ADD index.php /var/www/html/ # 先启动php-fpm(默认后台运行),再以前台模式启动Apache作为容器主进程,避免容器退出 CMD ["/bin/bash", "-c", "php-fpm && httpd -D FOREGROUND"] - 第三步:异常排查(可选)
如果按上述配置修改后仍有访问异常,进入容器检查php-fpm生成的套接字文件权限:
确保运行Apache的ls -l /run/php-fpm/www.sockapache用户对该文件有读写权限,默认安装配置下权限会自动匹配,不需要手动修改。
额外优化建议
- 把多个分散的
dnf install命令合并为一层,安装完成后加dnf clean all清理rpm缓存,可以大幅缩小最终镜像体积 - 删除手动创建
/run/php-fpm的步骤,php-fpm启动时会自动生成对应目录和套接字文件,多余步骤会增加不必要的镜像层
内容的提问来源于stack exchange,提问作者froinchi
相关产品推荐
相关产品推荐

