Minimal-Konfiguration für Apache-reverse-proxy in Docker container
Ich versuche zu setup ein Ubuntu Docker-container läuft ein Node.js HTTP app auf port 9000. Zu imitieren, um den Aufbau der Produktionsumgebung, ich würde auch gerne den Apache als eine einfache reverse-proxy-server innerhalb des Containers, die nach vorne, um diese app von, sagen wir, port 80 (was ich aussetzen, um der großen bösen Welt).
Habe ich schon einrichten können Node.js app-container in Ordnung und ich kann die Installation und Konfiguration von Apache in meinem Dockerfile
; aber ich bin komplett neu einrichten eines reverse-proxy, so dass während der Apache sicherlich beginnt, ist es nicht proxy.
Meine Dockerfile
etwa so aussieht:
# 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 bin Anhängen /etc/apache2/apache2.conf
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/
Mir läuft dieses image mit dem folgenden Befehl:
docker run -p 80:80 -p 81:9000 -d IMAGE
Was ich erwarte ist, dass Sie gehen, um http://$DOCKER_HOST
(also die Wurzel) wird abgeholt von Apache und an localhost:9000
(d.h., meine app) in den container. (Wenn ich mich http://$DOCKER_HOST:81
, gehe ich direkt zu der app; einfach nur, um zu beweisen, dass es läuft. Dieser funktioniert.) Ich vermute, dass das problem nicht bei allen zu tun, mit Docker, aber die Apache-Konfiguration.
- Verwenden Sie die apache-reverse-proxy für den alleinigen Zweck der Offenlegung Ihrer web-server auf port 80 statt 9000 oder hätte es einen anderen Zweck?
- Genau. Auf der Produktions-Maschine, Apache ist dabei andere, Unbeteiligte Zeug, ich bin gerade dabei, das reverse-proxy-Schicht in meinem container, so passt die Einrichtung in der Produktion.
- Pls Bearbeiten Sie Ihre Frage mit dem Befehl verwenden Sie, um ausführen Ihre docker-container
- Bearbeitet
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem Dockerfile, das LAUFEN Anweisungen definieren die Befehle, die ausgeführt werden soll, von der docker-daemon beim Bau der docker-image. Diese Befehle werden nicht ausgeführt, wenn Sie die
docker run
Befehl.In Ihrem Fall, dass Sie versucht zu kommen mit ein docker-image, zunächst zwei Prozesse:
Aber die
start-app.sh
script inCMD ["./start-app.sh"]
scheint nur starten Sie den nodejs-server.Sie können nicht über die
docker run
Befehl start mehr, dass ein Prozess, aber Sie können es haben, starten Sie einen Prozess, der anfangen andere. Es gibt verschiedene Wege, dies zu erreichen, nehmen Sie einen Blick auf:aber mehr einfach ersetzen Ihre
CMD
Unterricht mit:und entfernen Sie die nutzlos
RUN service apache2 start
Linie.In Ihrem container, Docker startet ein Prozess (
/bin/bash
), die wiederum startet den apache und dann laufen./start-app.sh
.service apache2 start
an der Spitze derstart-app.sh
Skript