Docker:从 php 调用可执行文件不起作用
Docker: calling an executable from php does not work
我已经用 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 ( )
?>
return 值 127 听起来好像找不到文件...
但是当我和用户 "www-data" 一起进入容器时,一切正常:
docker-compose exec --user www-data php-fpm bash
assimp version // -> valid info response
因为我不确定可执行文件是否必须放在 "workspace" 或 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
对如何解决此问题或如何继续调试有任何想法吗?提前致谢!
Return 代码 127 是针对未找到的文件,但不一定是您正在执行的文件。
在这里你设置了一些库,但是当 docker 容器被执行时,你的 bashrc
没有被读取,因此,动态加载器 (/lib/ld-linux[...].so
) 没有找到你的 libassimp.so.4.1.0
因此,过程 returns 127.
您应该使用 Dockerfile 的 ENV
指令设置 PATH
和 LD_LIBRARY_PATH
,如下所示:
ENV PATH="/usr/local/bin:${PATH}"
ENV LD_LIBRARY_PATH=/usr/local/lib
我已经用 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 ( )
?>
return 值 127 听起来好像找不到文件...
但是当我和用户 "www-data" 一起进入容器时,一切正常:
docker-compose exec --user www-data php-fpm bash
assimp version // -> valid info response
因为我不确定可执行文件是否必须放在 "workspace" 或 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
对如何解决此问题或如何继续调试有任何想法吗?提前致谢!
Return 代码 127 是针对未找到的文件,但不一定是您正在执行的文件。
在这里你设置了一些库,但是当 docker 容器被执行时,你的 bashrc
没有被读取,因此,动态加载器 (/lib/ld-linux[...].so
) 没有找到你的 libassimp.so.4.1.0
因此,过程 returns 127.
您应该使用 Dockerfile 的 ENV
指令设置 PATH
和 LD_LIBRARY_PATH
,如下所示:
ENV PATH="/usr/local/bin:${PATH}"
ENV LD_LIBRARY_PATH=/usr/local/lib