MacOS环境下Docksal如何通过CLI直接运行PHP
问题根因
Docksal的LAMP运行时全部封装在Docker容器内,默认不会在MacOS宿主机安装PHP解释器,因此直接在宿主机执行php会返回command not found报错。
从你贴的cli容器配置可以看到,项目根目录已经以volume形式挂载到容器内的/var/www路径,只要把宿主机的PHP命令调用透明转发到cli容器执行,就能实现不进入容器交互层直接运行PHP的需求,且不会出现目录结构不匹配的问题。
操作方案
方案1:单次直接调用(无需额外配置)
Docksal自带的fin工具提供了非交互式执行容器内命令的能力,直接按以下格式调用即可:
fin exec php <你的命令参数>
常用示例:
- 查看PHP版本:
fin exec php -v - 执行项目内脚本:
fin exec php public/index.php - 运行composer等配套工具:
fin exec composer install
fin exec会自动将宿主机当前工作目录映射到容器内的对应挂载路径,命令执行完成后直接返回宿主机终端,不会进入容器的bash交互界面。
方案2:全局别名配置(宿主机直接敲php命令生效)
如果需要像原生安装PHP一样直接输入php就能调用,可以给shell配置永久别名,步骤如下:
- 打开对应shell的配置文件:MacOS新版本默认用zsh,编辑
~/.zshrc;如果用的是bash,编辑~/.bash_profile
nano ~/.zshrc
- 在文件末尾追加以下别名配置:
# 转发PHP命令到Docksal cli容器 alias php='fin exec php' # 可选:同时配置常用配套工具的别名 alias composer='fin exec composer' alias drush='fin exec drush'
- 按
Ctrl+O保存,Ctrl+X退出nano,执行以下命令重载配置立即生效:
source ~/.zshrc
验证效果
配置完成后在Docksal项目根目录执行:
php -v
正常会返回docksal/cli:php8.1-3.2镜像对应的PHP 8.1版本信息,和你进入容器交互层执行的结果完全一致。
注意事项
- 上述别名仅在包含
.docksal配置目录的Docksal项目路径下生效,非项目路径下调用会提示未找到Docksal项目,属于正常表现 - 不建议额外通过Homebrew在宿主机安装PHP,避免出现版本、扩展配置和容器内环境不一致的问题
- 如果需要执行宿主机上非项目目录的PHP脚本,直接写脚本的绝对路径即可,
fin exec会自动处理路径映射
内容的提问来源于stack exchange,提问作者JAyenGreen
相关产品推荐
相关产品推荐

