从宿主机访问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
相关产品推荐
相关产品推荐

