使用PHP在shell中运行docker
那么,我需要使用PHP函数来运行Docker
。 我有一个推送链接的网页,我使用shell_exec
或exec
执行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
组中并重新启动服务。
现在起作用了。 感谢所有帮助过我的人