【发布时间】:2020-11-10 22:40:07
【问题描述】:
我有一个这样的 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。
但它只删除了 test3.txt,而当我从 html 运行它时它没有复制 docker 上的文件。另外,我没有从网站获得任何输出。这很奇怪,因为它可以通过 sh /Users/path/script.sh 在终端运行。
我对 html 和 docker 都是新手。如果有人能给我建议,将不胜感激。
【问题讨论】:
-
从您的帖子中,我不清楚
script.sh的内容到底是什么。是您在问题之上写的两行(sudo和rm)吗?除了 Dave 给出的评论之外,请注意以您的方式运行命令,script.sh不会由 bash 执行。在您的简单情况下可能无关紧要,但如果您将特定于 bash 的功能放入脚本中,这可能很重要。 -
是的
script.sh是两行(sudo 和 rm)。对不起,我没有说清楚。 -
我强烈建议想出一种不同的方式来调用这个任务。使用
docker命令来root 整个主机非常容易;如果您不习惯 Docker CLI 或以这种方式调用 shell 命令,很容易意外引入重大安全漏洞。 -
@yuhangchen:如果复制不起作用,您至少应该收到一条错误消息。我建议使用
bash -cx 'cp -v .....'运行复制并从 shell_exec 中捕获 stdout 和 stderr 并将结果显示在 HTML 页面上以进行调试。 -
@user1934428:我收到错误“输入设备不是 TTY”。
标签: php html bash docker shell