gpt4 book ai didi

php - 使用PHP在Shell中运行Docker

转载 作者:行者123 更新时间:2023-12-02 19:36:28 25 4
gpt4 key购买 nike

好吧,我需要使用PHP函数运行Docker。我有一个网页,在其中推送链接,我使用shell_execexec执行 shell 命令。如果执行就像ls或期望得到结果的东西,这对我有用。问题在于,如果该命令用于运行Docker(例如ping),则该命令不起作用。

我想要的是,当用户单击链接时,shell将执行命令以在浏览器中运行Docker,并且页面将在那里重定向。

例如,如果我使用shell_exec('firefox');,则应打开一个新的firefox浏览器,但它不起作用。看来浏览器已打开,但几秒钟后关闭了。

这是无法执行的Docker执行。

public function executeDocker() {
$result = shell_exec('docker run --rm -p 3838:3838 shiny/gsva_interactive /usr/bin/shiny-server.sh');

echo "<br><br>Execution: ".$result;
}

最佳答案

仅当命令完全退出时,shell_exec才返回命令(在本例中为Docker)的输出。在使用ping的情况下(它将一直执行ping操作),并且可能在您的Docker镜像的情况下,该过程将永远不会自行退出,因此将永远不会给出响应。

使用passthru而不是shell_exec应该会给您Docker脚本的命令行输出,作为响应。

如果不打算退出Docker容器,则应该使用$containerId = shell_exec('docker run -d --rm -p 3838:3838 shiny/gsva_interactive /usr/bin/shiny-server.sh')detached mode中启动它,这样docker run命令将退出。这将返回容器ID,您可以将其与 $result = shell_exec("docker ps -f \"id=$containerId\"") 一起使用,以检查容器是否正常运行,并重定向用户(如果有)。

关于php - 使用PHP在Shell中运行Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com