为什么Docker运行Drupal镜像时服务器返回空响应?
问题根本原因
你使用的drupal:9.1-php7.4-fpm-alpine3.13为FPM版本镜像,这类镜像本身不内置HTTP服务器,仅提供PHP-FPM服务,默认监听9000端口的FastCGI协议,无法直接响应HTTP请求,因此映射80端口后访问会得到空响应。
解决方案
方案1:换用内置Apache的官方镜像(推荐,适合快速部署测试)
直接拉取带apache标识的Drupal镜像,镜像内置完整HTTP服务,可直接响应HTTP请求,运行命令如下:
docker run -p 8080:80 drupal:9.1-apache
运行成功后直接访问http://localhost:8080即可看到Drupal默认页面。
方案2:搭配Web服务器使用FPM版本镜像(适合生产环境部署)
如果必须使用FPM版本,需要额外部署Nginx或Apache作为Web前端,配置规则如下:
- 启动Drupal FPM容器,无需映射80端口,可映射9000端口供Web服务器访问
- 部署Web服务器容器,配置FastCGI代理规则转发PHP请求到Drupal容器的9000端口
- 确保Web服务器和Drupal容器挂载了相同的站点根目录,保证静态资源可正常加载
验证方法
你可以执行以下命令查看当前运行的Drupal容器的端口监听情况,确认没有80端口监听:
# 先获取容器ID docker ps # 进入容器查看端口监听 docker exec -it 替换为你的容器ID ss -tuln
执行后可以看到仅9000端口处于监听状态,验证前面的原因判断。
内容的提问来源于stack exchange,提问作者Eleanor Holley
相关产品推荐
相关产品推荐

