
在 laravel sail 中直接修改容器内 php.ini 文件无效,需通过 `sail artisan sail:publish` 导出 docker 配置,编辑本地 `docker/php/php.ini` 并重建镜像,才能使 php 配置生效。
laravel Sail 是基于 Docker 的轻量级开发环境,其 PHP 配置并非在运行时动态加载宿主机或容器内任意路径的 php.ini,而是由构建阶段的 Docker 镜像决定。因此,直接进入容器(如 sail shell)后编辑 /etc/php/8.1/cli/php.ini 或 conf.d/99-sail.ini 是临时且无效的——这些改动会在容器重启后丢失,且 Sail 启动时使用的镜像并未包含你的修改。
✅ 正确做法是:使用 Sail 提供的官方定制机制:
-
导出 Docker 配置文件
在项目根目录执行:sail artisan sail:publish该命令会在项目中生成 docker/ 目录,包含 Dockerfile, docker-compose.yml, php/Dockerfile, 以及可编辑的 php/php.ini 等文件。
-
编辑 PHP 配置
修改 docker/php/php.ini(对应 CLI 和 FPM 共享的配置),例如启用扩展或调整内存限制:; docker/php/php.ini memory_limit = 2G upload_max_filesize = 64M post_max_size = 64M extension=mysqli extension=gd⚠️ 注意:不要修改 docker/php/Dockerfile 中 copy php.ini 的路径逻辑;默认它已指向此文件。确保 php.ini 文件存在且权限正常(UTF-8 编码,无 bom)。
-
重建并重启服务
立即学习“PHP免费学习笔记(深入)”;
sail build --no-cache sail up -d–no-cache 确保重新编译镜像,跳过缓存旧配置。之后访问 http://localhost 并运行 ,即可看到更新后的“Loaded Configuration File”指向 /etc/php/8.1/cli/php.ini,且所有修改均已生效。
? 补充说明:
- 若你使用的是 apache(非默认 nginx),需确认 docker/php/Dockerfile 中是否同时复制了 apache2/php.ini ——但 Laravel Sail 默认使用 PHP-FPM + Nginx,因此只需维护 cli 和 fpm 下的配置(docker/php/php.ini 会被同时用于两者)。
- windows + WSL2 环境下,务必在 WSL2 的 ubuntu 终端中执行上述命令(而非 Windows PowerShell),并确保 Docker Desktop 的 WSL2 后端已启用。
- 修改后可通过 sail php –ini 快速验证配置路径,或 sail php -m 检查扩展是否载入。
遵循此流程,即可持久、可靠地定制 Laravel Sail 的 PHP 运行时行为。