我正在尝试设置一个Ubuntu Docker容器,该容器在9000端口上运行一个Node.js HTTP应用程序。为了模仿生产环境的设置,我还想在容器内运行Apache作为简单的反向代理服务器,从80端口(我向大家公开)转发到该应用程序。
我已经成功设置了Node.js应用程序容器,并且可以在我的Dockerfile中安装和设置Apache;但是我完全不知道如何设置反向代理,因此虽然Apache确实启动了,但它没有进行代理。
我的Dockerfile大致如下:
我正在使用以下命令运行此镜像:
我期望的是访问
我已经成功设置了Node.js应用程序容器,并且可以在我的Dockerfile中安装和设置Apache;但是我完全不知道如何设置反向代理,因此虽然Apache确实启动了,但它没有进行代理。
我的Dockerfile大致如下:
# DOCKER-VERSION 1.3.0
FROM ubuntu:12.04
# Install and set up Apache as a reverse proxy
RUN apt-get -y install apache2 libapache2-mod-proxy-html
COPY apache2.conf /etc/apache2/app.conf
RUN cat /etc/apache2/app.conf >> /etc/apache2/apache2.conf
RUN service apache2 start
# Install and set up Node.js and bundle app
# ...This works...
EXPOSE 80
CMD ["./start-app.sh"]
我正在附加到/etc/apache2/apache2.conf
的apache2.conf
是:
ServerName localhost
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
我正在使用以下命令运行此镜像:
docker run -p 80:80 -p 81:9000 -d IMAGE
我期望的是访问
http://$DOCKER_HOST
(即根目录)能够被 Apache 捕获,并转发到容器内的 localhost:9000
(即我的应用程序)。如果我访问 http://$DOCKER_HOST:81
,我会直接进入应用程序,以证明它已经启动。这个方法可行。 我猜问题与 Docker 无关,而是 Apache 配置的原因。请注意,文本中保留了 HTML 标签,请勿删除。