Ich versuche einen Ubuntu Docker Container einzurichten, der eine Node.js HTTP App auf Port 9000 ausführt. Um das Setup der Produktionsumgebung nachzuahmen, möchte ich auch Apache als ausführen ein einfacher Reverse-Proxy-Server innerhalb des Containers, der von Port 80 an diese App weiterleitet (die ich der großen, schlechten Welt aussetze).Minimale Konfiguration für Apache Reverse Proxy im Docker Container
Ich war in der Lage, die Node.js App Container fein einzurichten und ich kann Apache in meinem Dockerfile
installieren und einrichten; aber ich bin völlig neu beim Einrichten eines Reverse-Proxy, also während Apache sicherlich startet, Proxy nicht.
Mein Dockerfile
sieht ungefähr so aus:
# 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"]
... wo die apache2.conf
ich /etc/apache2/apache2.conf
bin Anfügen ist:
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/
ich dieses Bild bin mit dem folgenden Befehl:
docker run -p 80:80 -p 81:9000 -d IMAGE
Was ich erwarte ist, dass zugehen(d. H. Der Stamm) wird von Apache abgeholt und im Container an localhost:9000
(d. H. Meine App) weitergeleitet. (Wenn ich zu http://$DOCKER_HOST:81
gehe, gehe ich direkt zur App; nur um zu beweisen, dass es läuft und läuft. Das funktioniert.) Ich vermute, dass das Problem gar nicht mit Docker zu tun hat, sondern die Apache-Konfiguration.
Verwenden Sie den Apache Reverse Proxy nur für den Zweck, Ihren Webserver auf Port 80 statt 9000 verfügbar zu machen, oder hätte er einen anderen Zweck? – Thomasleveil
Genau. Auf der Produktionsmaschine macht Apache andere, nicht verwandte Sachen; Ich setze gerade den Reverse-Proxy-Layer in meinen Container, damit er mit dem Setup in der Produktion übereinstimmt. – Xophmeister
Pls bearbeiten Sie Ihre Frage mit dem Befehl verwenden Sie, um Ihre Docker-Container – Thomasleveil