You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在容器中为composer.json定义的PHP脚本传递参数

解决Docker容器内PHP脚本接收宿主机参数的问题

你遇到的问题根源在于/bin/sh -c的命令字符串没包含参数占位符,加上引号转义的问题,导致宿主机的参数根本没传到容器里的PHP脚本。这里给两个实用的解决办法:

方法1:直接执行PHP命令(推荐)

如果容器里能直接调用php命令,没必要套一层sh -c,直接在composer.json里这么写:

"scripts": {
    "cli": "docker exec -it container_name php cli.php $@"
}

之后在宿主机执行composer cli arg1 --option=value,所有参数会直接传递给容器内的cli.php。

方法2:用sh -c时正确传递参数

如果必须通过/bin/sh -c执行,要把参数占位符$@加到命令字符串里,同时用单引号避免宿主机shell提前解析变量:

"scripts": {
    "cli": "docker exec -it container_name /bin/sh -c 'php cli.php $@' -- $@"
}

这里的--是告诉docker exec后面的内容是要传递给容器内命令的参数,宿主机的$@会把composer接收的所有参数传给容器里的shell,最终传递给PHP脚本。

额外注意

  • 确保容器里的cli.php能被正常调用,要么给文件加执行权限,要么始终用php cli.php的方式启动
  • 如果是Windows环境,需要把$@换成%*,同时调整引号的转义格式

内容的提问来源于stack exchange,提问作者Chris Athanasiadis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:44:52