Я могу запустить свой проект Yii2 с помощью Docker на локальном хосте. Теперь мне нужно выполнить скрипт perl по запросу http. Скрипт Perl находится в корневой папке. Вот кусок кода, как я пытаюсь выполнить Perl-скрипт.
public function actionExecPerl()
{
$path = './script.pl';
$exec = exec("/usr/bin/perl $path", $output);
if(is_executable($path)) {
return 'ok';
}
else {
return 'Unable to call Perl Script';
}
}
Затем я пытаюсь выполнить этот скрипт по http, с локального адреса:
http://127.0.0.1:22080/sync/exec-perl
В результате я всегда получаю: Невозможно вызвать Perl Script
Я перепробовал все возможные пути (полный путь), но не получил результата.
На всякий случай, я делюсь своим файлом конфигурации Docker
DockerFile
FROM yiisoftware/yii2-php:7.2-apache
# Change document root for Apache
RUN sed -i -e 's|/app/web|/app/api/web|g' /etc/apache2/sites-available/000-default.conf
docker-compose.yml
version: '3.2'
services:
backend:
build: backend
ports:
- 21080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
- ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini
# Mount source-code for development
- ./:/app
api:
build: api
ports:
- 22080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
- ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini
# Mount source-code for development
- ./:/app
mysql:
image: mysql:latest
restart: always
container_name: mysql-sensei
ports:
- 3306:3306
command:
--default-authentication-plugin=mysql_native_password
--innodb_flush_method=O_DIRECT
volumes:
- ./docker/mysql/dump:/docker-entrypoint-initdb.d
- ./docker/mysql/my.cnf:/etc/mysql/my.cnf
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=secret
- MYSQL_USER=secret
- MYSQL_PASSWORD=secret