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

从宿主机访问Docker部署的PHP Web应用失败求助

解决Docker部署PHP Apache应用后宿主机无法访问的问题

我来帮你排查一下问题,看起来你遇到的无法访问的情况主要有两个核心原因,咱们一步步解决:

问题分析

1. Apache服务根本没启动

你在Dockerfile里设置了CMD ls && whoami && pwd ;,而且运行容器时还额外加了/bin/sh参数——这两个操作都会覆盖官方php-apache镜像默认的Apache启动命令。容器启动后只执行了ls、whoami这些命令,或者直接进入shell,完全没启动web服务,自然无法响应你的访问请求。

2. 端口映射不匹配

php:7.4-apache镜像默认把Apache服务运行在容器的80端口,但你启动容器时用了-p 60:60,把宿主机60端口映射到容器的60端口——可容器里60端口根本没有服务在监听,这就相当于把请求发到了一个空端口。

修复步骤

1. 修改Dockerfile

删掉Dockerfile里的CMD行,因为官方php-apache镜像已经配置好了默认的启动命令,不需要额外设置:

FROM php:7.4-apache
COPY . /var/www/html

2. 重新构建镜像

docker build -t jenkins_php .

3. 正确启动容器

把宿主机的60端口映射到容器的80端口,并且不要加/bin/sh参数(让容器用默认命令启动Apache):

docker run -d -p 60:80 jenkins_php:latest

4. 验证容器状态

运行docker ps查看容器是否正常运行,端口映射是否正确:

docker ps

正常情况下会看到类似这样的输出(注意PORTS列显示0.0.0.0:60->80/tcp):

CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                  NAMES
26e3590f0e6a   jenkins_php:latest   "docker-php-entrypoi…"   10 seconds ago  Up 10 seconds  0.0.0.0:60->80/tcp     kind_chatelet

5. 测试访问

现在再访问http://localhost:60,应该就能正常打开你的PHP应用了!

如果还是有问题,可以进入容器内部验证Apache是否运行:

docker exec -it <你的容器ID> /bin/bash

然后在容器内执行curl localhost,如果能看到你的index.php内容,说明服务在容器内是正常的,再检查宿主机的网络和端口占用情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:37:42