Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker:从php调用可执行文件不起作用_Php_Docker_Laradock - Fatal编程技术网

Docker:从php调用可执行文件不起作用

Docker:从php调用可执行文件不起作用,php,docker,laradock,Php,Docker,Laradock,我已经建立了一个Laradock环境,运行Nginx和php fpm容器。我想从PHP调用一个可执行文件: <?php print exec('whoami'); // www-data echo "<br>"; exec('/usr/local/bin/assimp version', $output, $returnValue); print $returnValue; // 127 echo "<br>";

我已经建立了一个Laradock环境,运行Nginx和php fpm容器。我想从PHP调用一个可执行文件:

<?php
    print exec('whoami'); // www-data
    echo "<br>";
    exec('/usr/local/bin/assimp version', $output, $returnValue);
    print $returnValue;   // 127
    echo "<br>";
    print_r($output);      // Array ( ) 
?>
由于我不确定是否必须将可执行文件放在“工作区”或PHPFPM容器中,因此我尝试了这两种方法,结果相同。同样,将可执行文件放在/var/www目录中也没有帮助

Dockerfile添加了可执行文件:

USER www-data
COPY ./assimp /usr/local/bin/assimp
COPY ./libassimp.so.4.1.0 /usr/local/lib/libassimp.so.4.1.0
RUN ln -s /usr/local/lib/libassimp.so.4.1.0 /usr/local/lib/libassimp.so
RUN chmod 777 /usr/local/bin/assimp
RUN echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/lib' >> ~/.bashrc

有没有办法解决这个问题或者继续调试?提前谢谢

返回代码127用于未找到的文件,但不一定是您正在执行的文件。 在这里您设置了一些lib,但是当执行docker容器时,您的
bashrc
不会被读取,因此,动态加载程序(
/lib/ld linux[…]so
)找不到您的
libassimp.so.4.1.0
,因此,进程返回127

您应该使用Dockerfile的
ENV
指令设置
PATH
LD\u LIBRARY\u PATH
,如下所示:

ENV PATH=“/usr/local/bin:${PATH}”
ENV LD_LIBRARY_PATH=/usr/local/lib

许多典型的
docker运行路径
实际上并不读取
.bashrc
,将内容放在Dockerfile中并不是一个很好的做法。只需将内容放在已在搜索/加载程序路径中的目录中。感谢您的评论。我将可执行文件移动到
/usr/bin
,将lib移动到
/usr/lib
。结果仍然是一样的。我发现,即使lib位于标准文件夹中,也找不到:
ldconfig-p | grep libassimp.so
在php fpm容器中没有结果。在工作区容器中执行此操作会起作用,并且可以找到lib。可以告诉php从工作区容器而不是php fpm容器执行文件吗?@reply谢谢您的提示。我尝试了你的建议,但仍然得到同样的错误。我所做的:
docker compose stop workspace php fpm
将这些行添加到.env文件中:env PATH=“/usr/local/bin:${PATH}”env LD_LIBRARY_PATH=/usr/local/lib
docker compose up-d workspace php fpm
问题仍然是一样的,我的php文件返回127。现在我可以确认这是库路径的问题。当我在不需要外部库的情况下构建可执行文件时,一切正常。所以这对我来说是一个有用的解决方法。
USER www-data
COPY ./assimp /usr/local/bin/assimp
COPY ./libassimp.so.4.1.0 /usr/local/lib/libassimp.so.4.1.0
RUN ln -s /usr/local/lib/libassimp.so.4.1.0 /usr/local/lib/libassimp.so
RUN chmod 777 /usr/local/bin/assimp
RUN echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/lib' >> ~/.bashrc