Docker-Compose+Caddy+PHP-FPM配置问题:访问index.php报404错误
解决Caddy + PHP-FPM Docker部署中PHP文件404问题
你的问题核心是Caddy与PHP-FPM容器的文件挂载路径不匹配:
- Caddy容器中网站文件挂载在
/srv/www,并以此作为root路径 - PHP-FPM容器中网站文件挂载在
/var/www/html
当Caddy处理PHP请求时,会将自身容器内的文件路径(如/srv/www/index.php)传递给PHP-FPM,但PHP-FPM容器中不存在这个路径,因此返回404错误。
两种可行解决方案
方案1:统一两个容器的文件挂载路径
修改docker-compose.yml中PHP-FPM服务的挂载路径,使其与Caddy保持一致:
version: "3.8" services: caddy: image: caddy:alpine ports: - "80:80" - "443:443" - "443:443/udp" volumes: - $PWD/Caddyfile:/etc/caddy/Caddyfile - $PWD/www:/srv/www - $PWD/caddy/data:/data - $PWD/caddy/config:/config - $PWD/caddy/log:/var/log depends_on: - app app: image: php:fpm-alpine ports: - "9000:9000" volumes: - "$PWD/www:/srv/www" # 改为与Caddy一致的路径 working_dir: /srv/www # 可选:同步工作目录,避免PHP-FPM默认路径影响
Caddyfile无需修改,保持原配置即可:
localhost:80 { root * /srv/www php_fastcgi app:9000 file_server }
方案2:在Caddy中指定PHP-FPM的文件路径
如果不想修改PHP-FPM的挂载路径,可以在Caddy的php_fastcgi指令中添加root参数,告诉PHP-FPM文件在其容器内的实际路径:
修改后的Caddyfile:
localhost:80 { root * /srv/www php_fastcgi app:9000 { root /var/www/html # 指定PHP-FPM容器内的文件根路径 } file_server }
docker-compose.yml保持原配置不变即可。
额外排查建议
- 进入PHP-FPM容器验证文件路径:
docker-compose exec app ls /var/www/html # 或修改后的路径,确认文件存在 - 查看PHP-FPM的日志,确认具体的文件找不到错误:
docker-compose logs app
内容的提问来源于stack exchange,提问作者tgirod
相关产品推荐
相关产品推荐

