如何解决从php运行docker命令
我正在使用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;',$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
是运行Web服务器的用户,我通过执行get_current_user()
和return_var
由exec
返回的第三个参数来获得该用户
我尝试了另一种方式,通过运行以下命令来测试docker run
命令:
exec('OUTPUT=`docker run --rm -w /pdf bwits/pdf2htmlex whoami`;echo $OUTPUT;',$return_var);
它返回了root
作为输出,这意味着docker run
已成功运行,因此运行该命令没有问题。
解决方法
我终于找到了解决方案,我只是想让任何人知道,以防有人遇到相同的问题。
我决定删除一些参数,然后查看接下来会发生什么,最后,我发现-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;',$return_var);
最后,生成了HTML文件。
不确定-ti
为何引起此问题,我只按照官方页面here的建议进行操作。
但是,无论如何,问题解决了:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。