基于wordpress:php8.3-fpm-alpine与nginx:stable-alpine的镜像迁移问题排查
问题排查与解决
1. Nginx "directory index forbidden" 错误
可能原因
- Nginx配置未指定正确的索引文件,默认未包含
index.php - Nginx无法通过FastCGI连接到PHP-FPM容器,导致无法解析PHP索引文件
/var/www/html目录或文件权限不正确,Nginx进程(nginx用户)无读取权限- Nginx配置中的
root路径指向错误,未对应到WordPress的实际根目录
解决步骤
- 修改
nginx.conf,确保index指令包含PHP文件:index index.php index.html index.htm; - 确认Nginx配置中已正确配置FastCGI转发到PHP-FPM服务(如果是Docker Compose部署,需使用服务名作为地址,比如
wordpress:9000):location ~ \.php$ { fastcgi_pass wordpress:9000; # 替换为你的PHP-FPM容器/服务名 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } - 检查目录权限,确保
/var/www/html及其文件的所有者/组包含nginx用户,或设置全局可读:chown -R nginx:nginx /var/www/html # 或临时设置权限调试 chmod -R 755 /var/www/html - 验证
nginx.conf中的root指令是否指向/var/www/html(WordPress默认根目录):server { listen 80; root /var/www/html; # ... 其他配置 }
2. docker exec 找不到bash的问题
可能原因
- 多阶段构建时,安装bash的步骤未保留到最终镜像(比如在PHP-FPM阶段安装,但最终运行的是Nginx镜像)
- 虽然安装了bash,但
docker exec未指定完整路径,或容器的$PATH环境变量未包含/bin - 容器启动时使用的用户无执行bash的权限
解决步骤
- 确认Dockerfile中是在Nginx镜像阶段安装bash(因为你exec的是Nginx容器):
FROM nginx:stable-alpine RUN apk add --no-cache bash # ... 其他配置 - 执行exec时指定bash的完整路径:
docker exec -it my_container /bin/bash - 检查容器的
$PATH变量,若缺失/bin,可在Dockerfile中添加:ENV PATH="/bin:$PATH" - 若容器以非root用户运行,确保该用户对
/bin/bash有执行权限:chmod +x /bin/bash
内容的提问来源于stack exchange,提问作者merilstack
相关产品推荐
相关产品推荐

