php 执行bash代码从HTML到运行docker命令

zfciruhq  于 12个月前  发布在  PHP
关注(0)|答案(3)|浏览(126)

我有一个这样的bash代码:

sudo docker exec -it container_id /bin/bash -c 'cp test1.txt test2.txt'
rm test3.txt

字符串
它在终端中运行良好。但我想从html调用它。我的html代码是:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>run bash</title>
</head>
<body>
<?php
 if(isset($_POST['submit']))
 {
   $output=shell_exec('sh /Users/path/script.sh');
}
?>
<p><?php echo $output; ?></p>
</body>


基本上,我想点击按钮“提交”(我上面放的php代码将被另一个html文件调用),它将执行bash代码登录到docker并运行命令cp test1.txt test2.txt
但是当我从html运行它时,它只删除了test3.txt,而没有复制docker上的文件。而且,我没有从网站上得到任何输出。这很奇怪,因为它可以在终端中工作,只需sh /Users/path/script.sh
我对html和docker都是新手。如果有人能给我给予建议,我将非常感激。

bpzcxfmw

bpzcxfmw1#

在我的例子中,错误与sudo无关。

<pre><?php echo exec('sh /path/to/my/script/script.sh 2>&1', $output, $return_var); ?></pre>
<pre><?php print_r($output); ?></pre>
<pre><?php echo $return_var; ?></pre>

字符串
注意,当执行过程中出现错误,或者进程没有产生输出时,shell_exec()会返回NULL。因此,使用函数shell_exec()无法通过返回值检测进程是否成功执行。如果需要检查进程执行的退出代码,请改用exec()函数。
输出为the input device is not a TTY
在bash脚本中,我将sudo docker exec -it container_id /bin/bash -c 'cp test1.txt test2.txt'改为docker exec -i container_id /bin/bash -c 'cp test1.txt test2.txt'
基本上,运行docker exec -i而不是docker exec -it解决了我的问题。

pgx2nnw8

pgx2nnw82#

因为你是用“sudo”执行docker,所以你也需要用sudo通过shell_exec()执行命令。
此外,如果您的服务器环境使用chroot,则运行PHP进程的用户甚至可能无法使用docker二进制文件。
我建议您与系统管理员联系。

pkwftd7m

pkwftd7m3#

首先,你需要允许(可能是www-data用户)在没有密码的情况下使用sudo。你可以通过sudoers来做到这一点:
第一个月
添加行:
<user> ALL=(ALL) NOPASSWD: /path/to/your/script.sh
然后你的shell_exec应该看起来像这样:
$output=shell_exec('/usr/bin/sudo /path/to/your/script.sh');
但是要小心,只有在知道你在做什么的情况下才使用sudo;)
我还建议使用“pre”打印输出
<pre><?php echo $output; ?></pre>

相关问题