Если функция exec возвращает ошибку при выполнении консольной команды, которая успешно работает в cmd.exe, то нужно проверить переменную окружения PATH, которая используется в php. И если в PATH нет пути к необходимой команде, то нужно добавить его.

Например, если не работает команда git, и в getenv('PATH') нет пути к ней, то нужно добавить путь в PATH:

Прямо в скрипте:

$envPath = getenv('PATH');
$envPath .= ';c:\Program Files\Git\bin';
putenv('PATH=' . $envPath);

Либо в файле php.ini в директиве include_path.

Добавить в начало скрипта:

set -euxo pipefail

Что всё это значит:

set -e

set -e - прекращает выполнение скрипта если команда завершилась ошибкой, выводит в stderr строку с ошибкой. Обойти эту проверку можно добавив в пайплайн к команде true: mycommand | true.

set -u

set -u - прекращает выполнение скрипта, если встретилась несуществующая переменная.

set -x

set -x - выводит выполняемые команды в stdout перед выполненинем.

set -o pipefail

set -o pipefail - прекращает выполнение скрипта, даже если одна из частей пайпа завершилась ошибкой. В этом случае bash-скрипт завершит выполнение, если mycommand вернёт ошибку, не смотря на true в конце пайплайна: mycommand | true.

В контейнере localhost и 127.0.0.1 ведет к самому себе, а не к хосту на котором запущен докер, что логично. Доступиться к хосту можно, указав специальное DNS имя:

host.docker.internal

Страницы