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

时间:2018-11-27 14:38:43

标签: php docker laradock

我已经设置了一个运行Nginx和php-fpm容器的Laradock环境。从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 ( ) 
?>

返回值127听起来好像没有找到文件...

但是当我使用用户“ www-data”进入容器时,一切正常:

docker-compose exec --user www-data php-fpm bash
assimp version // -> valid info response

由于我不确定是否必须将可执行文件放置在“工作区”或php-fpm容器中,因此我尝试了两种方法,结果相同。另外,将可执行文件放在/ 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

任何想法如何解决此问题或如何继续进行调试?预先感谢!

1 个答案:

答案 0 :(得分:3)

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

您应使用Dockerfile的PATH指令设置LD_LIBRARY_PATHENV

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