我正在尝试使用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"]
答案 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"]