zsh-artisan Docker深度指南:如何自动识别compose文件并智能调用Sail与docker compose

发布时间:2026/8/23 11:57:20
zsh-artisan Docker深度指南:如何自动识别compose文件并智能调用Sail与docker compose zsh-artisan Docker深度指南如何自动识别compose文件并智能调用Sail与docker compose【免费下载链接】zsh-artisanLaravel artisan plugin for zsh to help you to run artisan from anywhere in the project tree, with auto-completion, and it can automatically open files created by artisan!项目地址: https://gitcode.com/gh_mirrors/zs/zsh-artisanzsh-artisan 是一款专为 Laravel 项目打造的 zsh 插件让你在项目的任意子目录中直接运行artisan命令并自带 Tab 自动补全。它最被低估的能力之一是Docker 环境的智能感知插件会自动识别项目根目录下的 compose 文件判断项目是否使用 Laravel Sail并在docker compose与docker-compose之间自动选择可用命令帮你把 artisan 命令精准地送进容器里执行 工作原理一次命令背后的三步决策当你敲下artisan migrate时插件的核心逻辑 artisan.plugin.zsh 会依次完成三次判断向上查找 artisan从当前目录一路查到根目录确认你身处 Laravel 项目第 60-73 行的_artisan_find函数扫描 compose 文件在 artisan 所在目录检测是否存在 compose 配置文件选择执行方式根据 compose 文件内容决定用php、sail还是docker compose执行整个决策过程在 artisan.plugin.zsh 第 18-36 行完成无需你做任何配置。自动识别 compose 文件的规则插件只检查artisan 所在目录的当前层maxdepth 1即项目根目录依次匹配这四种文件名源码第 18 行compose.yamlcompose.ymldocker-compose.yamldocker-compose.yml命中任意一个即视为 Docker 项目。这也是为什么 Laravel Sail 项目必须把docker-compose.yaml放在项目根部——放在docker/子目录里是检测不到的。智能调用 Sail靠一个环境变量识别找到 compose 文件后插件并不会盲目使用docker compose exec而是先检查它是否是Laravel Sail项目。判断方式非常直接在 compose 文件中查找环境变量LARAVEL_SAIL: 1源码第 24-25 行。有该标记→ 走vendor/bin/sail artisan ...由 Sail 接管执行没有该标记→ 走通用 docker compose 流程为什么 Sail 要特殊对待因为 Sail 封装了服务依赖编排自动确保 Nginx、MySQL 等配套服务就绪直接docker compose exec反而容易踩到服务未就绪的坑。兼容新旧命令docker compose vs docker-composeDocker 从 Compose V2 起把命令合并成了docker compose而旧版仍需docker-compose。插件通过_docker_compose_cmd函数源码第 85-91 行优雅地解决了这个兼容问题先静默执行一次docker compose成功 → 使用新语法docker compose失败 → 回退到旧语法docker-compose这样无论你是 Docker Desktop 最新版还是多年前的老环境插件都能自动适配 ✅服务名匹配如何知道 exec 进哪个容器compose 项目里可能有十几个服务插件用一条正则来锁定 Laravel 应用容器源码第 28 行app | php | api | workspace | laravel.test | webhost这覆盖了绝大多数 Laravel 项目的命名习惯。执行命令形如docker compose exec app php artisan migrate还有一个容易被忽略的细节插件会判断当前终端是否为 TTY源码第 29-34 行。交互式终端下直接exec而在 Tab 补全触发等非交互场景下自动追加-T参数避免补全卡住或容器异常挂起。实际效果对比在tests/Feature目录深处假设项目使用 Sail$ pwd ~/MyProject/tests/Feature $ artisan make:model MyAwesomeModel Model created successfully.你不需要cd回项目根目录不需要写./vendor/bin/sail artisan也不用纠结本机是docker compose还是docker-compose——插件全部代劳。快速安装以 oh-my-zsh 为例克隆仓库到自定义插件目录注意目录名用artisan而非仓库名git clone https://gitcode.com/gh_mirrors/zs/zsh-artisan.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/artisan然后在~/.zshrc的plugins(...)中加入artisan即可插件主文件为仓库根目录的 artisan.plugin.zsh。常见问题Q检测到 compose 文件但容器没启动命令会怎样命令会原样透传给 docker报出标准的 no such service/container 错误——插件不会替你启动容器请先sail up或docker compose up -d。Q为什么我的容器名没被匹配到如果你的服务名不在app/php/api/workspace/laravel.test/webhost之列插件会跳过 Docker 流程报错。此时建议重命名服务或直接用sail artisan手动执行。Q非 Sail 项目还能享受哪些能力任意 compose 项目只要有匹配的服务名即可在任意子目录运行artisanTab 补全同样基于容器内artisan list实时拉取自定义命令也能被识别。小结zsh-artisan 把在 Docker 环境里跑 artisan这件繁琐的事压缩成了三步自动决策认文件、认 Sail、认命令语法。配合自动补全与make:*后自动打开新建文件的特性设置ARTISAN_OPEN_ON_MAKE_EDITOR即可开启它是 Laravel 容器化开发工作流里一个轻量却实用的加速器。【免费下载链接】zsh-artisanLaravel artisan plugin for zsh to help you to run artisan from anywhere in the project tree, with auto-completion, and it can automatically open files created by artisan!项目地址: https://gitcode.com/gh_mirrors/zs/zsh-artisan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考