【问题标题】:How to configure the docker file to run cgi-script like perl如何配置 docker 文件以像 perl 一样运行 cgi-script
【发布时间】:2017-07-10 20:47:00
【问题描述】:

我有这些文件:

  • index.php
  • Dockerfile
  • /conf/myawesomesite.conf
  • cgi-bin/helloworld.pl

在 /conf/myawesomesite.conf 中:

<VirtualHost *:80>

    ServerAdmin webmaster@myawesomesite.com
    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

【问题讨论】:

    标签: perl docker apache2


    【解决方案1】:

    我必须将 RUN a2enmod cgid 添加到 Dockerfile 并将以下块添加到 conf(假设 perl 脚本已复制到 /var/www/myawesomesite.com/www/cgi-bin/):

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

    【讨论】:

      【解决方案2】:

      尝试添加到您的 Dockerfile:

      RUN chmod +x cgi-bin/helloworld.pl
      

      CGI 脚本必须设置可执行位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-08
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 2013-12-31
        相关资源
        最近更新 更多