【问题标题】:Docker: calling an executable from php does not workDocker:从 php 调用可执行文件不起作用
【发布时间】:2018-11-27 14:38:43
【问题描述】:

我已经建立了一个运行 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

任何想法如何解决此问题或如何继续调试?提前致谢!

【问题讨论】:

  • 许多典型的docker run 路径实际上并不读取.bashrc,将内容放在Dockerfile 中并不是一个好习惯。只需将内容放在搜索/加载器路径中已经存在的目录中即可。
  • 感谢您的评论。我将可执行文件移至/usr/bin,将库移至/usr/lib。结果还是一样。我发现即使 lib 在标准文件夹中也找不到: php-fpm 容器中的ldconfig -p | grep libassimp.so 没有结果。在工作区容器中执行此操作可以找到 lib。是否可以告诉 php 从工作空间容器而不是从 php-fpm 容器执行文件?

标签: php docker laradock


【解决方案1】:

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

您应该使用 Dockerfile 的 ENV 指令设置您的 PATHLD_LIBRARY_PATH,如下所示:

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

【讨论】:

  • @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。
  • 我现在可以确认这是库路径的问题。当我在不需要外部库的情况下构建可执行文件时,一切正常。所以这对我来说是一个有用的解决方法。
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2015-01-13
相关资源
最近更新 更多