Я пытаюсь настроить контейнер Ubuntu Docker, который запускает HTTP-приложение Node.js на порте 9000. Чтобы имитировать настройку производственной среды, я также хотел бы запустить Apache как простой обратный прокси-сервер в контейнере, который пересылает это приложение, например, через порт 80 (который я выставляю в большой плохой мир).Минимальная конфигурация для обратного прокси-сервера Apache в контейнере Docker
Я смог настроить контейнер приложения 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.
Вы используете обратный прокси-сервер apache с единственной целью разоблачить ваш веб-сервер на порту 80 вместо 9000 или у него будет другая цель? – Thomasleveil
Точно. На производственной машине Apache делает другие, несвязанные вещи; Я просто помещаю обратный прокси-слой в свой контейнер, чтобы он соответствовал настройке в процессе производства. – Xophmeister
Pls отредактируйте ваш вопрос с помощью команды, которую вы используете для запуска вашего контейнера докеров – Thomasleveil