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

Docker入门:通过docker-compose.yml运行PHP脚本失败求助

解决Docker Compose下PHP脚本无法正常运行的问题

咱们一步步排查问题,找到为什么访问localhost看不到预期的Hello World:

1. 确认容器运行状态

先检查所有服务是否正常启动:

docker-compose ps

你需要确保web、mysql、phpmyadmin三个容器的状态都是Up。如果有容器状态是Exit或者Restarting,查看对应容器的日志找问题:

# 查看web容器(PHP-Apache)的日志
docker-compose logs web
# 如果是数据库容器有问题,查看mysql日志
docker-compose logs mysql

2. 验证目录映射是否正确

你的目录结构是:

-app
  -public_html
    -index.php
  -docker-compose.yml

必须在app目录下执行docker-compose up -d,否则./public_html/会映射到你执行命令所在目录的public_html,而不是app下的。

可以进入web容器验证文件是否存在:

docker exec -it web bash
# 进入容器后,查看/var/www/html下的文件
ls /var/www/html
# 查看index.php内容
cat /var/www/html/index.php

如果看不到index.php或者内容不对,说明目录映射路径错误,确保在docker-compose.yml所在的目录执行启动命令。

3. 检查端口占用情况

本地的80端口可能被其他服务(比如本地Apache、Nginx、IIS)占用,导致Docker容器的80端口无法正常映射。

检查端口占用:

  • Linux/macOS:
lsof -i :80
  • Windows:
netstat -ano | findstr ":80"

如果发现有其他进程占用80端口,可以:

  • 停止本地占用80端口的服务;
  • 或者修改docker-compose.yml中web服务的端口映射,比如改成:
ports:
  - "8081:80"
  - "443:443"
  - "32823:22"

然后重启服务:

docker-compose down && docker-compose up -d

之后访问localhost:8081试试。

4. 确认PHP脚本无语法错误

虽然你的脚本很简单,但还是要确保index.php的内容完全正确,没有多余的空格或者字符:

<?php echo 'Hello World !'; ?>

如果有语法错误,因为你设置了PHP_DISPLAY_ERRORS=1,浏览器应该会显示错误信息,你可以根据错误提示修复。

5. 检查Apache是否正确解析PHP

webdevops/php-apache-dev镜像默认已经配置好PHP解析,但如果还是有问题,可以在容器内测试PHP是否能正常运行:

# 在web容器内执行PHP命令行测试
docker exec -it web php -r "echo 'Hello World !';"

如果这个命令能输出Hello World !,说明PHP本身没问题,问题可能出在Apache的配置或者文件权限上。

另外提个小优化:在Docker Compose 3版本中,links已经是过时的用法,推荐使用depends_on来定义服务依赖,不过这不会影响你当前的PHP脚本运行(因为你的脚本没用到数据库),可以把web服务的配置改成:

services:
  web:
    # ... 其他配置 ...
    depends_on:
      - mysql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:47:51