必须用Docker Compose一条命令启动Nginx、PHP-FPM、MySQL三容器,挂载myweb项目并配置PATH_INFO路由规则与必需PHP扩展,执行docker-compose up -d后访问localhost:8080即可看到ThinkPHP欢迎页。

快速搭建一个可立即运行的ThinkPHP 8.0本地测试环境,避免手动装PHP、配Nginx、调MySQL参数的繁琐过程,用Docker Compose一条命令启动全部服务,代码写完就能跑起来。
初始化项目结构
在空白目录中执行以下命令,创建标准ThinkPHP 8.0项目骨架:
docker run --rm -v $(pwd):/app composer create-project topthink/think:8.0.* myweb
这一步会拉取官方镜像、挂载当前目录为/app、生成myweb子目录。注意:不要跳过--rm参数,否则容器退出后残留无用镜像;【myweb必须是空目录名,若已存在会报错中断】。
立即学习“PHP免费学习笔记(深入)”;
执行完成后,确认目录结构含app/、config/、public/、vendor/等核心文件夹。public目录即Web入口根路径,后续Nginx将直接指向此处。
编写 docker-compose.yml
在项目根目录(即myweb同级)新建docker-compose.yml文件,内容如下:
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./myweb:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
image: php:8.0-fpm
volumes:
- ./myweb:/var/www/html
- ./php.ini:/usr/local/etc/php/php.ini
environment:
- TZ=Asia/Shanghai
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=thinkphp
- MYSQL_USER=tp
- MYSQL_PASSWORD=tp123
volumes:
- mysql_data:/var/lib/mysql
这个配置定义了三容器协同:Nginx反向代理PHP请求,PHP-FPM处理逻辑,MySQL提供数据库。其中【mysql_data是命名卷,确保数据重启不丢失】。
配置 Nginx 支持 ThinkPHP 路由
在相同目录下新建nginx.conf文件,内容必须包含PATH_INFO传递规则:
server {
listen 80;
root /var/www/html/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
关键点在于最后两行:缺了fastcgi_split_path_info和PATH_INFO,ThinkPHP的Route::rule()就会失效,所有路由都 fallback 到首页或404。这是线上最常见的502/404根源。
准备 PHP 运行时配置
创建php.ini文件,启用ThinkPHP必需扩展:
extension=fileinfo
extension=mbstring
extension=openssl
extension=pdo_mysql
date.timezone = Asia/Shanghai
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On
ThinkPHP 8.0依赖fileinfo判断文件类型、mbstring处理多字节字符串、pdo_mysql连接数据库。若缺失任一扩展,runtime目录初始化或数据库操作会直接报错退出。
启动并验证服务
第一步:确保当前目录下有myweb/、docker-compose.yml、nginx.conf、php.ini四个实体;
第二步:执行docker-compose up -d;
第三步:等待约15秒,执行curl -I http://localhost:8080,返回HTTP/1.1 200 OK即表示Nginx+PHP通路正常;
第四步:访问http://localhost:8080,看到ThinkPHP默认欢迎页,说明整个链路已就绪。



















