ThinkPHP容器化需将src/整体挂载至/var/www/html,Nginx root设为/public;启用PATH_INFO;PHP需安装pdo_mysql、mbstring等扩展;MySQL用初始化脚本建库,应用连mysql服务名。

ThinkPHP 项目结构适配容器路径
ThinkPHP 默认入口是 public/ 目录,Nginx 的 root 必须指向该目录,否则 CSS、JS 和路由都会 404。在挂载代码时,建议将本地 src/(含 application、public、thinkphp 等)整体映射进容器的 /var/www/html,再让 Nginx 配置中 root /var/www/html/public;。不要把 public 单独挂载,否则框架自动加载路径会出错。
Nginx 配置要点(支持 ThinkPHP 路由)
需启用 PATH_INFO 或兼容模式,推荐使用以下 server 块配置:
-
root /var/www/html/public;—— 固定根路径 index index.php;-
location / { try_files $uri $uri/ /index.php?$query_string; }—— 支持 URL 重写 -
location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }—— 关键:保留 PATH_INFO 供 ThinkPHP 解析路由
php-fpm 容器定制关键项
ThinkPHP 依赖扩展较多,基础镜像需补全:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 必须安装:
pdo_mysql、mbstring、openssl、curl、xml - 推荐添加:
opcache(提升性能)、gd(图片处理) - 权限注意:运行用户设为
www-data,并确保/var/www/html及其子目录可读,runtime/目录需可写(可在启动命令中加RUN chown -R www-data:www-data /var/www/html/runtime)
MySQL 数据持久化与初始化
避免每次重启丢库,用命名卷或宿主机路径持久化数据;同时利用初始化脚本自动建库赋权:
立即学习“PHP免费学习笔记(深入)”;
- 在
docker-compose.yml中为 mysql 服务挂载./mysql/init:/docker-entrypoint-initdb.d - 在
./mysql/init/01-create-db.sql中写:CREATE DATABASE IF NOT EXISTS thinkphp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 应用连接时,host 填
mysql(即 compose 中服务名),端口默认3306,不是127.0.0.1


















