2017-05-04 1 views
3

Ich versuche, zwei verschiedene Domänen auf ein und demselben Docker Container und Port auszuführen.Mehrere VHosts auf ein und demselben Andock-Container

Der Docker Container läuft CentOS. docker-compose.yml sieht so aus:

web: 
    image: fab/centos 
    ports: 
    - "80:80" 
    volumes: 
    - ./src/httpd.conf:/etc/httpd/conf/httpd.conf 
    - ./src:/var/www/html 
    - ./src/hosts:/etc/hosts 
    environment: 
    - VIRTUAL_HOST=dummy.dev,tests.dev 

erklärte ich auch beide .dev Domain-Namen innerhalb von /etc/hosts auf dem Host-Computer (OS X.)

Es ist schon eine Weile her, seit ich virtuelle Hosts konfiguriert. Mein Verständnis war, dass ich sie nur deklarieren musste und dass Apache automatisch die richtigen Dateien liefern würde, abhängig von dem angeforderten HTTP HOST.

Das ist, was ich habe, fügte am Ende httpd.conf:

<VirtualHost *:80> # first host = default host 
    DocumentRoot /var/www/html/default 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/dummy 
    ServerName dummy.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/dummy.dev-error_log 
    CustomLog logs/dummy.dev-access_log common 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/tests 
    ServerName tests.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/tests.dev-error_log 
    CustomLog logs/tests.dev-access_log common 
</VirtualHost> 

jedoch in der Praxis entweder dummy.dev oder tests.dev Besuch /var/www/html/default tatsächlich dient. Dies ist, als hätte Apache nicht erkannt, welcher Host aufgerufen wird (obwohl ein Dump von $_SERVER in PHP den erwarteten Wert HTTP_HOST zeigt, dh entweder 127.0.0.1, dummy.dev oder tests.dev, je nachdem, welche URL ich besuche.)

Was habe ich vermisst?

Es ist mir unklar, ob dies ein Apache-Problem oder ein Docker ist.

(Bitte beachten Sie, dass dies eine andere Frage ist, als mehrere Apps in derselben Domäne mit einem anderen Port zu hosten. In meinem Fall möchte ich, dass die virtuellen Hosts alle in/derselben App/Port/Container sind.)

Antwort

1

Es stellte sich heraus, dass dies ein Apache-Konfigurationsproblem war.

Ich brauchte explizit Domain-Namen Virtual zu ermöglichen, etwa so:

NameVirtualHost *:80 

This answer helped.

Docker mit der Sache nichts zu tun hatte.

0

Die fab/centos existiert nicht in öffentlichen Docker-Hub, also nicht sicher, warum Sie das Problem auftreten.

Meine Empfehlung wäre, einen Schritt zurückzutreten und zu versuchen, es mit einem einfachen Beispiel arbeiten zu lassen.

docker search apache ergibt eboraas/apache als die meisten markierten Bild, so werde ich diese für das Beispiel verwenden.

In einem Testverzeichnis, verwenden Sie das Beispiel:

Datei: httpd.conf

<VirtualHost *:80> # first host = default host 
    DocumentRoot /var/www/html/default 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/dummy 
    ServerName dummy.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/dummy.dev-error_log 
    CustomLog logs/dummy.dev-access_log common 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/tests 
    ServerName tests.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/tests.dev-error_log 
    CustomLog logs/tests.dev-access_log common 
</VirtualHost> 

dann die vhost Websites erstellen & das Protokollverzeichnis.

mkdir -p logs; for i in default tests dummy; do mkdir -p $i; echo "hello $i" > $i/index.html; done 

Schließlich Docker ausführen.

docker run -it -v $(pwd):/var/www/html -v $(pwd)/httpd.conf:/etc/apache2/sites-available/000-default.conf -v $(pwd)/logs:/etc/apache2/logs -p 9090:80 --rm --name apache_c eboraas/apache 

Bitte beachte, dass ich im Grunde die gleichen Mengen verwenden, wie Sie in Ihrer Docker-compose.yml taten, mit der Ausnahme, dass ich site-available stattdessen die httpd.conf ändern.

Um zu testen, stellen Sie sicher, dass Sie Tests.dev und Dummy haben.auf der rechten Seite Docker IP und Test dev in/etc/hosts Hinweis:

$> curl dummy.dev:9090 
hello dummy 
$> curl tests.dev:9090 
hello tests 

Von diesem Punkt aufbauen auf dieses, indem zuerst die Docker Apache Bild versuchen, die Sie verwenden, dann versuchen Sie mit Ihrer benutzerdefinierten/etc/hosts-Datei, und dann in eine docker-compose-Datei zurücklegen

Verwandte Themen