Я пытаюсь настроить контейнер Ubuntu Docker, который запускает HTTP-приложение Node.js на порту 9000. Чтобы имитировать настройку производственной среды, я также хотел бы запустить Apache как простой обратный прокси-сервер в контейнере, который перенаправляет на этот app, скажем, с порта 80 (который я открываю для большого плохого мира).
Мне удалось правильно настроить контейнер приложения Node.js, и я могу установить и настроить Apache в моем Dockerfile
; но я совершенно новичок в настройке обратного прокси, поэтому, хотя 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"]
... где apache2.conf
, который я добавляю к /etc/apache2/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.