Docker: вызов исполняемого файла из php не работает - PullRequest
0 голосов
/ 27 ноября 2018

Я установил среду 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 ( ) 
?>

Возвращаемое значение 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 голосов
/ 27 ноября 2018

Код возврата 127 для файла, который не найден, но не обязательно тот, который вы выполняете.Здесь вы настраиваете некоторые библиотеки, но когда выполняется док-контейнер, ваш bashrc не читается, поэтому динамический загрузчик (/lib/ld-linux[...].so) не находит ваш libassimp.so.4.1.0, таким образом, процесс возвращает 127.

Вы должны установить свои PATH и LD_LIBRARY_PATH с помощью директив Dockerfile ENV следующим образом:

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

...