首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从php运行docker命令

从php运行docker命令
EN

Stack Overflow用户
提问于 2020-08-18 08:25:46
回答 1查看 550关注 0票数 0

我使用的是php 7.3。

我试图从服务器上运行一个docker命令,但失败了。

注意,如果我运行以下命令:

代码语言:javascript
复制
exec('OUTPUT=`sudo docker ps`;echo $OUTPUT;', $output, $return_var);

它成功运行,并返回以下消息:

代码语言:javascript
复制
"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES"

这意味着运行我的web服务器的用户可以运行docker命令。

PS:我现在没有任何正在运行的容器,我只想执行docker run命令。

但是,如果我运行docker命令,使用:

代码语言:javascript
复制
exec('OUTPUT=`docker run -ti --rm -v /server-path:/pdf bwits/pdf2htmlex pdf2htmlEX --zoom 1.3 20200818075525_634.pdf`;echo $OUTPUT;', $output, $return_var);

输出是一个空字符串,没有生成HTML文件。

奇怪的是,如果我直接在终端运行命令:

代码语言:javascript
复制
OUTPUT=`docker run -ti --rm -v /server-path:/pdf bwits/pdf2htmlex pdf2htmlEX --zoom 1.3 20200818075525_634.pdf`;echo $OUTPUT;

命令被执行,我可以看到pdf文件已经成功地转换成HTML。

PS:我在终端上运行了两次命令,因此有2个生成的HTML文件。

调试控制台将显示以下内容:

PS:root是运行webserver的用户,我通过执行get_current_user()获得这个用户,return_varexec返回的第三个参数。

我尝试了另一种方法,通过运行以下命令来测试docker run命令:

代码语言:javascript
复制
exec('OUTPUT=`docker run --rm -w /pdf bwits/pdf2htmlex whoami`;echo $OUTPUT;', $output, $return_var);

它将root作为输出返回,这意味着docker run已成功运行,因此运行该命令没有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-18 23:20:25

我终于找到了解决办法,我只想让任何人知道万一有人遇到同样的问题。

我决定删除一些参数,然后看看接下来会发生什么,最后,我发现-ti是罪魁祸首。

所以,我改变了这个

代码语言:javascript
复制
exec('OUTPUT=`docker run -ti --rm -v /server-path:/pdf bwits/pdf2htmlex pdf2htmlEX --zoom 1.3 20200818075525_634.pdf`;echo $OUTPUT;', $output, $return_var);

致:

代码语言:javascript
复制
exec('OUTPUT=`docker run --rm -v /server-path:/pdf bwits/pdf2htmlex pdf2htmlEX --zoom 1.3 20200818075525_634.pdf`;echo $OUTPUT;', $output, $return_var);

最后生成HTML文件。

不知道为什么-ti会引起这个问题,我只做了官方页面这里建议的事情。

但是,无论如何,问题解决了:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63464671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档