使用PHP在shell中运行docker

那么,我需要使用PHP函数来运行Docker 。 我有一个推送链接的网页,我使用shell_execexec执行shell命令。 这对我来说是行得通的,如果这个执行就像是一个ls或者一个预期的结果。 问题是,如果命令是运行Docker(或者例如一个ping)它不起作用。

我想要的是,当用户点击链接时,shell将执行一个命令在浏览器中运行Docker,页面将被redirect到那里。

例如,如果我使用shell_exec('firefox'); 这应该打开一个新的Firefox浏览器,但它不起作用。 看来,浏览器打开,但几秒钟后closures。

这是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才会返回a的输出,在本例中为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') ,所以docker run命令将会退出。 这将返回容器ID,你可以使用$result = shell_exec("docker ps -f \"id=$containerId\"")来检查容器是否正确运行,如果是的话就redirect用户。

最后我解决了它。 问题出在用户组和权限。 在我使用的系统中, CentOS ,apache服务器使用一个名为apache的用户。 此用户需要在docker组中并重新启动服务。

现在起作用了。 感谢所有帮助过我的人