2017-02-21 33 views
2

У меня есть эти файлы:Как настроить файл Docker для запуска CGI-скрипт, как Perl

  • index.php
  • Dockerfile
  • /conf/myawesomesite.conf
  • CGI-BIN/helloworld.pl

в /conf/myawesomesite.conf:

<VirtualHost *:80> 

    ServerAdmin [email protected] 
    ServerName myawesomesite.com 
    ServerAlias www.myawesomesite.com 
    DocumentRoot /var/www/html/myawesomesite.com/httpdocs 
    ErrorLog /var/www/myawesomesite.com/logs/error.log 
    CustomLog /var/www/myawesomesite.com/logs/access.log combined 
    Options ExecCGI 
    AddHandler cgi-script .pl 

</VirtualHost> 

в Dockerfile:

FROM ubuntu:16.04 

## Install Base Packages 
RUN apt-get update && apt-get -y install \ 
    apache2 \ 
    make \ 
    curl \ 
    git \ 
    gcc 

RUN a2enmod rewrite 

## Install Perl 
RUN apt-get update && apt-get -y install \ 
    libapache2-mod-perl2 \ 
    perl 

RUN a2enmod perl 

## Install PHP 
RUN apt-get update && apt-get -y install \ 
    php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json \ 
    php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline \ 
    libapache2-mod-php7.0 

RUN a2enmod rewrite 


EXPOSE 80 

RUN mkdir -p /var/www/html/myawesomesite.com/httpdocs 

RUN mkdir -p /var/www/myawesomesite.com/logs/ 

COPY ./conf/myawesomesite.conf /etc/apache2/sites-available/ 
RUN a2ensite myawesomesite 
RUN a2dissite 000-default.conf 

CMD /usr/sbin/apache2ctl -D FOREGROUND 

сборки и запустить контейнер, index.php правильно выполняет, но когда эта страница myawesomesite.com/cgi-bin/helloworld.pl сценарий просто печатается не выполняется. Результат ниже:

#!/usr/bin/perl 

print "Content-Type:text/html\n\n"; 
print "Hello World!"; 

Я ожидаю результат Hello World!, так как я добавил эти директивы в моем myawesomesite.conf файла. Но почему?

Options ExecCGI AddHandler cgi-script .pl

ответ

1

Попробуйте добавить в свой Dockerfile:

RUN chmod +x cgi-bin/helloworld.pl 

CGI скрипты должны иметь исполняемые биты установлены.

0

мне пришлось добавить RUN a2enmod cgid к Dockerfile и следующего блока к конф (при условии, PERL скрипт был скопирован /var/www/myawesomesite.com/www/cgi-bin/):

<Directory "/var/www/myawesomesite.com/www/cgi-bin/"> 
    Options +ExecCGI 
    AddHandler cgi-script .pl 
</Directory>