动作“ -D FOREGROUND”失败。在使用docker构建apache2映像时

时间:2018-07-10 13:27:47

标签: docker apache2

我正在尝试使用apache config构建apache映像,这将设置虚拟主机,并最终将所有非静态请求重定向到Unicorn。但是在构建映像时,它会因错误而失败。操作'-D FOREGROUND'失败

我为此目的遵循了一个教程,并在下面的虚拟主机中添加了我的apache2.conf文件

<VirtualHost *:80>
  ServerName    test.example.com
  DocumentRoot   /var/www/app/public

  RewriteEngine On

  # Redirect all non-static requests to unicorn
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://unicornservers%{REQUEST_URI} [P,QSA,L]

  RewriteCond %{DOCUMENT_ROOT}/public/$0 -f
  RewriteRule ^.+\.(jpg|jpeg|gif|png|ico|css|js|swf)$ /public/$0 [L]

  <Proxy balancer://unicornservers>
    BalancerMember http://127.0.0.1:3000
  </Proxy>

   ProxyPass / balancer://unicornservers/
  ProxyPassReverse / balancer://unicornservers/
  ProxyPreserveHost on

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>



</VirtualHost>

用于apache映像的docker文件

FROM ubuntu:latest

RUN apt-get update

RUN apt-get install -y apache2

RUN apt-get install -y apache2-utils

EXPOSE 80

ENV APACHE_LOCK_DIR /var/lock/apache2

ENV APACHE_LOG_DIR /var/log/apache2

ENV APACHE_PID_FILE /var/run/apache2/apache2.pid

ENV APACHE_SERVER_NAME localhost

ENV RAILS_ROOT /var/www/app

WORKDIR $RAILS_ROOT

COPY public public/

RUN a2enmod proxy

RUN a2enmod proxy_balancer

RUN a2enmod proxy_http

RUN a2enmod rewrite

RUN a2enmod ssl

RUN a2enmod headers

RUN a2enmod proxy_html

COPY config/containers/web/apache2.conf /etc/apache2

COPY config/containers/web/ssl /etc/apache2/ssl/

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

3 个答案:

答案 0 :(得分:1)

为此启用了解决方案,方法是在Dockerfile中启用模块 mod_lbmethod_byrequests

运行a2enmod lbmethod_byrequests

这在Apache 2.2.22中不是必需的,但在Apache 2.4中是必需的

答案 1 :(得分:0)

CMD命令在图像内部执行,如果图像本身未作为前台进程启动,则将无法实现任何目的。

您可能希望使用类似以下内容的图片开始

docker run -it YOUR_APACHE_IMAGE_HERE

-i -t选项将以here所述的交互式终端模式启动图像

答案 2 :(得分:0)

我必须在末尾添加以下行以使其起作用

ENTRYPOINT ["tail", "-f", "/dev/null"]