Docker:从php调用可执行文件不起作用
我已经建立了一个Laradock环境,运行Nginx和php fpm容器。我想从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>";
<?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/libdocker 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