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

Docker运行php-oci8镜像访问localhost报ERR_EMPTY_RESPONSE

问题根因

你使用的silencesys/php-oci8默认镜像为PHP-FPM变体,从你贴的运行日志中fpm is running的提示即可确认。
PHP-FPM是FastCGI进程管理器,本身不具备直接处理HTTP请求的能力,默认监听9000端口,必须搭配Nginx、Apache这类Web服务器才能对外提供HTTP访问服务。你之前直接启动容器并映射宿主机80端口到容器80端口,但容器内部根本没有进程监听80端口,因此浏览器访问时无法拿到任何响应,触发ERR_EMPTY_RESPONSE报错。

可落地解决方法

方案1:本地快速测试(适合验证Hello World等简单场景)

不需要额外部署Web服务,启动容器时覆盖默认启动命令,直接调用PHP内置开发服务器监听80端口即可:

docker run -d -p 80:80 --rm --name temp-container -v "$PWD":/var/www/html silencesys/php-oci8 php -S 0.0.0.0:80

执行完命令等2秒再访问localhost,就能正常看到Hello World!输出。
注意:PHP内置开发服务器仅适合本地临时调试,绝对不能用于生产环境

方案2:标准生产级部署(Nginx + PHP-FPM 架构)

如果需要长期稳定使用,采用Docker桥接网络把Nginx容器和PHP-FPM容器互联,是更规范的做法:

  • 第一步:创建专用Docker桥接网络
docker network create php-test-net
  • 第二步:启动PHP-FPM容器,不需要映射80端口,只要挂载代码目录、加入刚创建的网络即可
docker run -d --rm --name php-fpm --network php-test-net -v "$PWD":/var/www/html silencesys/php-oci8
  • 第三步:在当前代码目录下新建Nginx配置文件default.conf,写入如下配置:
server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
  • 第四步:启动Nginx容器,映射80端口,同时挂载代码目录和刚才写的配置文件,加入同一个桥接网络
docker run -d -p 80:80 --rm --name nginx --network php-test-net -v "$PWD":/var/www/html -v "$PWD/default.conf":/etc/nginx/conf.d/default.conf nginx:alpine

启动完成后访问localhost,即可正常解析PHP文件。

通用排查技巧

后续遇到端口映射后访问无响应的问题,可以先进入容器执行端口查看命令,确认容器内是否真的有服务在你映射的端口上监听:

# 进入运行中的容器
docker exec -it 容器名 /bin/bash
# 查看容器内所有监听的TCP端口
ss -tulnp

你之前直接启动默认镜像时执行这个命令,就能看到只有9000端口处于监听状态,没有80端口的服务,就能快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:09:24