直接在docker容器中运行php文件最简单方式是用docker run --rm -v $(pwd):/app -w /app php:8.2-cli php hello.php,适用于脚本执行、调试和ci任务;需注意cli镜像默认不带扩展,路径权限及容器内工作目录设置。

直接在 Docker 容器里运行 PHP 文件,不需要装本地环境,用 docker run 挂载执行最简单,适合脚本、调试、CI 任务等一次性场景。
用 docker run --rm -v 挂载并执行单个文件
这是最轻量、最常用的方式,尤其适合 hello.php、数据迁移、命令行工具等无需长期运行的脚本。
-
--rm:容器执行完自动销毁,不留残留 -
-v $(pwd):/app:把当前目录挂载进容器,确保路径可读(注意宿主机文件权限,Linux/macOS 下避免 root 写入后容器内无法读) -
-w /app:显式指定工作目录,防止因镜像默认路径导致php: command not found或找不到文件 - 推荐镜像:
php:8.2-cli(体积小、启动快、无 Web 服务干扰)
示例命令:
docker run --rm -v $(pwd):/app -w /app php:8.2-cli php hello.php
如果报错 Permission denied,先检查宿主机文件是否可读:ls -l hello.php;Windows 用户需确认 Docker Desktop 共享驱动器已启用。
在已运行的容器里执行 PHP 文件(docker exec)
适用于已有 PHP 容器(如 Laravel + Nginx + PHP-FPM 组合),需要临时跑维护脚本、Artisan 命令或调试逻辑。
- 必须知道容器名或 ID,例如
my-app-php - 路径是容器内的路径,不是宿主机路径(除非你提前挂载过)
- 若脚本依赖 Composer 自动加载或框架引导,务必在容器内路径下执行,否则会报
Class not found - 加
-u www-data可避免因用户权限导致写日志/缓存失败(尤其在 FPM 镜像中)
示例:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
docker exec -u www-data my-app-php php /var/www/html/artisan migrate
如果提示 php: not found,说明该容器没装 CLI 版 PHP(比如纯 php-fpm 镜像默认不带 php 命令),需进容器确认:docker exec -it my-app-php which php。
构建镜像打包 PHP 文件(Dockerfile + CMD)
适合需要复用、部署到 CI/CD 或生产调度的脚本,比如定时清理、API 数据同步等长期任务。
-
COPY是硬打包,文件变更必须重新docker build,不适合开发阶段频繁改代码 - 若脚本依赖扩展(如
mysqli、curl),必须在Dockerfile中显式安装:RUN docker-php-ext-install mysqli - Alpine 镜像(如
php:8.2-cli-alpine)体积更小,但部分扩展编译更麻烦,ext-mbstring等需额外apk add
最小 Dockerfile 示例:
FROM php:8.2-cli COPY hello.php /app/ WORKDIR /app CMD ["php", "hello.php"]
常见报错和对应动作
几个高频卡点,几乎都跟路径、权限、镜像功能缺失有关:
-
php: not found→ 用了php-fpm镜像却想调php命令;换php:8.2-cli或在 FPM 镜像中apt install php-cli -
Permission denied→ 宿主机文件权限不足(Linux/macOS)或 Docker Desktop 共享设置未开(Windows/macOS) -
No such file or directory→-w工作目录设错,或挂载路径与php后面写的路径不一致 -
Class 'PDO' not found→ 镜像没装pdo扩展,CLI 镜像默认不装任何扩展,必须手动docker-php-ext-install pdo
真正容易被忽略的是:CLI 镜像默认不带任何 PHP 扩展,哪怕只是 json_encode() 都没问题,但一旦用到数据库、cURL、GD,就必须自己装——这点和本地 WAMP/XAMPP 完全不同。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










