Yii框架 Docker怎么用_Yii框架容器化部署方案【方法】

大强吖_9988

大强吖_9988

2026-04-24

189人浏览

原创

Yii容器化核心卡点在PHP扩展、Web服务路径、数据库网络三处,缺一则500或Connection refused:需显式安装pdo_mysql/mbstring等扩展;Apache/Nginx须正确配置DocumentRoot和重写规则;数据库host必须用服务名如'db'而非localhost。

yii框架 docker怎么用_yii框架容器化部署方案【方法】

Yii 容器化不是“装个镜像就能跑”,核心卡点在 PHP 扩展、Web 服务路径、数据库网络三处,漏一个就 500 或 Connection refused。

PHP 扩展缺失导致容器启动失败

容器里 php -v 能跑,但 Yii 启动报错“Class 'PDO' not found”或“mbstring extension is not loaded”,说明基础扩展没装全。官方 php:8.2-apache 镜像默认只带最简扩展,Yii 2.x 至少要 pdo_mysql、mbstring、xml;Yii 3.x 还强依赖 json 和 ctype。

  • 别用 alpine 镜像起步——pdo_mysql 编译容易卡在 libmysqlclient,调试成本高
  • Dockerfile 里必须显式安装并启用:RUN docker-php-ext-install pdo pdo_mysql mbstring xml ctype json && docker-php-ext-enable pdo pdo_mysql mbstring xml ctype json
  • 进容器执行 php -m | grep -E 'pdo|mbstring|json' 快速验证,比看日志快
  • 检查 phpinfo() 输出的 Loaded Configuration File 路径,确保你改的是它,不是镜像里只读的副本

Apache/Nginx 没把请求转发给 index.php

浏览器打开是 403、404 或直接下载 index.php 源码,问题不在代码,而在 Web 服务器没识别 Yii 的入口逻辑。Yii 2.x 默认靠 web/.htaccess 重写 URL,但官方 PHP-Apache 镜像默认禁用 AllowOverride;Nginx 则需要手动配 fastcgi_pass 和 try_files。

  • Apache 场景:在虚拟主机配置里,DocumentRoot 必须指向 /var/www/html/web(Yii 2)或 /var/www/html/public(Yii 3),不能是项目根目录
  • <directory></directory> 块里必须有 AllowOverride All 和 Require all granted
  • Nginx 场景:确认 location / 块里有 try_files $uri $uri/ /index.php?$args;,且 fastcgi_pass 指向 PHP-FPM 服务名(如 php:9000)
  • 删掉 web/ 下空的 .htaccess——如果 mod_rewrite 没加载,它反而触发 500,而 Docker 默认不暴露 Apache 错误日志

数据库连接写 localhost 导致 Connection refused

本地开发时 'host' => 'localhost' 没问题,一进容器就报 SQLSTATE[HY000] [2002] Connection refused,因为容器内 localhost 指自己,不是宿主机或数据库容器。

Docker Image Puller
Docker Image Puller

使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。

下载
  • docker-compose.yml 里数据库服务名是 db,Yii 配置里就得写 'host' => 'db',别用环境变量拼接字符串,容易引号逃逸
  • 加健康检查:在 db 服务里配 healthcheck(比如 mysqladmin ping -h localhost -u root -proot),然后 app 服务用 depends_on: { db: { condition: service_healthy } }
  • 调试时别只看 Yii 报错——进 PHP 容器直接执行 nc -zv db 3306,秒级确认网络连通性
  • runtime 目录权限常被忽略:runtime 和 assets 必须属主为 www-data(Apache)或 www-data/nginx(Nginx),否则写缓存失败也会 500

开发 vs 生产的镜像构建差异

同一个 Dockerfile 不能通吃开发和生产。开发要挂载代码、开 Xdebug;生产要删 dev 依赖、关调试、用非 root 用户运行。

  • 多阶段构建更安全:composer install --no-dev --optimize-autoloader 放构建阶段,运行阶段只 COPY vendor/ 和代码,体积小、攻击面小
  • 开发环境用 volume 挂载:volumes: - ./:/app,但注意 runtime 目录不能被覆盖,得单独挂载或设 chmod
  • 生产镜像里删掉 xdebug、opcache.enable_cli=0 关 CLI 缓存,user www-data 显式降权
  • .dockerignore 必须包含 vendor/、.git、tests/、docker-compose.yml,避免无谓 COPY 拖慢构建

真正难的不是写完 docker-compose.yml,而是每次改配置后,能不能在 30 秒内判断是 PHP 扩展问题、Web 路由问题,还是 Docker 网络问题——关键在分层验证:先 php -m,再 curl -I http://localhost,最后 nc -zv db 3306。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii docker yii框架

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

11524

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6661

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2175

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4208

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4934

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3871

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5577

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4362

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12302

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习