我有一个问题,已经多次通过网络问过,但没有一个解决方案可以帮助我解决问题。
我需要一个带有单个按钮的非常简单的网站,通过该按钮,执行单个shell命令以部署docker容器。
为此我有3个文件都位于/ var / www / html /:
1- Depl-Script(一个简单的Linux文件,由chmod + x和chmod 777生成,并且没有.sh扩展名,包括一个命令:
docker run -it -p 8080:8080 surrogate
2-一个DepGUI.php
<?php
// $output=shell-exec("/var/www/html/Depl-Script"); //didn't work
$output=shell_exec("./Depl-Script"); //this doesn't work neither
echo $output; //prints 0
$output1=shell_exec("whoami"); //prints www-data
echo $output1;
?>
3- a Main.html,包括:
<form action="DepGUI.php">
<input type="submit" value="Open Script">
</form>
Shell-exec不能用于运行shell脚本。 我怎么知道它不起作用?我检查了泊坞容器,没有创建任何东西。
我尝试了哪些解决方案:
1)我从CLI用户运行shell脚本(Dep-Script)时工作正常。
2)为了确保,我更改了etc / passwd文件,找到了带有www-data用户的行并将其登录shell改为/ bin / bash,然后通过www-data(apache)用户,我执行了相同的shell脚本,它的工作原理。 (我将/ etc / passwd文件返回到原始形状)
3)我检查了/etc/php5/apache2/php.ini和/etc/php5/cli/php.ini和exec,并且没有禁用shell_exec。
4)我用“sh”参数检查了shell-exec和exec命令,但是没有用。
提前感谢任何帮助/评论。 感谢
更新
我将错误重定向到输出
$output=shell_exec("./Depl-Script 2>&1");
我注意到错误与docker有关,“输入设备不是TTY”,然后我在脚本(Dep-Script)中的docker命令中删除了-t,错误消失了。我收到了与docker权限相关的新错误,并使用以下链接解决了它: