thinkphp 8.0 docker部署需确保五项全满足:自动加载生效、路由重写可用、runtime可写、数据库连接就绪、静态路径正确;缺一则首页白屏、后台404、上传失败、登录态丢失。

ThinkPHP 8.0 配置 Docker 部署,关键不是“装完就跑”,而是让框架在容器里真正按预期工作——自动加载要生效、URL 路由不能 404、runtime 可写、数据库连得上、静态资源能访问。漏掉任一环,首页白屏、后台打不开、上传失败、登录态丢失都会立刻出现。
确保 PHP 运行环境满足 ThinkPHP 8.0 要求
ThinkPHP 8.0 明确要求 PHP ≥ 8.0.0,低版本会直接报 ParseError 或 Attribute 错误。Dockerfile 中必须指定准确版本(如 php:8.1-apache 或 php:8.1-fpm),不能用 php:latest。还要安装必需扩展:
- pdo_mysql(数据库驱动)
- mbstring(多字节字符串支持)
- xml(配置解析、模板渲染依赖)
- zip(部分组件或命令行工具需要)
- gd(图片处理,如验证码、缩略图)
构建时用 --no-dev 参数安装 Composer 依赖,否则 vendor/autoload.php 不生成,启动必报 Class 'think\App' not found。
Apache 或 Nginx 必须正确支持 PATHINFO/重写路由
ThinkPHP 默认使用 PATHINFO 模式(如 /index.php/user/index),容器内 Web 服务默认不启用 .htaccess 解析:
- Apache:必须在虚拟主机配置中开启 AllowOverride All,并启用 rewrite 模块(a2enmod rewrite)
- Nginx:需在 location ~ .php$ 块中添加 fastcgi_split_path_info 和 PATH_INFO 传递,推荐用 try_files $uri $uri/ /index.php?$query_string 简化配置
不配好这一项,所有菜单跳转、短剧列表页、后台接口全部 404。
runtime 和 storage 目录权限与挂载方式要合理
ThinkPHP 运行时生成日志、缓存、路由缓存等文件,必须可写:
- 构建镜像时 RUN mkdir -p /var/www/html/runtime/{log,cache,route,view} && chmod -R 777 /var/www/html/runtime
- 生产部署建议用 volume 挂载 runtime(如 ./runtime:/var/www/html/runtime:rw),既持久又避免镜像内固定权限引发的 UID 冲突
- 不要挂载整个项目目录为只读后又试图写 runtime——矛盾操作会导致静默失败
数据库连接和环境变量要解耦配置
不要把数据库密码硬编码在 .env 或 database.php 里:
- 用 docker-compose.yml 的 environment 字段传入 DB_HOST、DB_NAME、DB_USER、DB_PWD
- DB_HOST 填服务名(如 mysql),不是 localhost(容器内 localhost 指自己)
- MySQL 容器需提前初始化或通过 init.sql 挂载执行建库建表,避免首次访问报“数据库不存在”
注:若用 MySQL 8.0,注意默认认证插件是 caching_sha2_password,PHP 8.1+ 通常兼容;如遇连接失败,可在启动参数加 --default-authentication-plugin=mysql_native_password。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











