如何在容器中为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
相关产品推荐
相关产品推荐

