Docker容器运行且端口映射80:80正常,本地无法访问应用如何解决?
问题排查项
文件路径不匹配
你的Dockerfile中配置了COPY src/ /var/www/html/,需要确认你的wordcountapp.php文件是存放在本地构建上下文的src目录下。如果文件直接放在构建根目录,没有放入src文件夹,容器内的Apache站点目录就不会存在这个文件,访问会返回404错误。未指定正确的访问路径
Apache服务默认的索引文件为index.html、index.php,直接访问localhost会默认请求索引文件,而你的入口文件名为wordcountapp.php,需要访问localhost/wordcountapp.php才能加载对应的应用。如果要直接访问根域名打开应用,可以将wordcountapp.php重命名为index.php,或者在Dockerfile中添加Apache配置修改默认索引规则。宿主机80端口被占用
虽然docker ps显示端口映射成功,但可能存在宿主机80端口被其他服务(如本地部署的Apache、Nginx、其他web应用)占用的情况,你可以执行命令验证端口占用情况:- Windows系统:
netstat -ano | findstr :80 - Linux/macOS系统:
lsof -i :80
如果80端口被其他进程占用,可以停止对应进程,或者修改Docker端口映射为其他未占用端口(如8080:80)后访问localhost:8080验证。
- Windows系统:
容器内文件权限不足
php:7.2-apache镜像默认使用www-data用户运行Apache服务,如果复制过去的文件没有读权限会导致访问报错,你可以在Dockerfile中增加权限配置:
FROM php:7.2-apache COPY src/ /var/www/html/ RUN chown -R www-data:www-data /var/www/html/
- 容器内部服务异常
你可以进入容器内部验证服务是否正常:
执行docker exec -it my-app bash进入容器,再执行curl localhost查看是否能正常返回页面内容,同时执行ls /var/www/html确认文件是否正确复制到容器内。
内容的提问来源于stack exchange,提问作者user14686913
相关产品推荐
相关产品推荐

