我使用的是php 7.3。
我试图从服务器上运行一个docker命令,但失败了。
注意,如果我运行以下命令:
exec('OUTPUT=`sudo docker ps`;echo $OUTPUT;', $output, $return_var);它成功运行,并返回以下消息:
"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES"这意味着运行我的web服务器的用户可以运行docker命令。
PS:我现在没有任何正在运行的容器,我只想执行docker run命令。
但是,如果我运行docker命令,使用:
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文件。
奇怪的是,如果我直接在终端运行命令:
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_var是exec返回的第三个参数。
我尝试了另一种方法,通过运行以下命令来测试docker run命令:
exec('OUTPUT=`docker run --rm -w /pdf bwits/pdf2htmlex whoami`;echo $OUTPUT;', $output, $return_var);它将root作为输出返回,这意味着docker run已成功运行,因此运行该命令没有问题。

发布于 2020-08-18 23:20:25
我终于找到了解决办法,我只想让任何人知道万一有人遇到同样的问题。
我决定删除一些参数,然后看看接下来会发生什么,最后,我发现-ti是罪魁祸首。
所以,我改变了这个
exec('OUTPUT=`docker run -ti --rm -v /server-path:/pdf bwits/pdf2htmlex pdf2htmlEX --zoom 1.3 20200818075525_634.pdf`;echo $OUTPUT;', $output, $return_var);致:
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会引起这个问题,我只做了官方页面这里建议的事情。
但是,无论如何,问题解决了:)
https://stackoverflow.com/questions/63464671
复制相似问题