web-dev-qa-db-fra.com

Plusieurs hôtes virtuels sur un même conteneur de menu fixe

J'essaie d'exécuter deux domaines différents sur un même conteneur et port Docker.

Le conteneur Docker exécute CentOS. docker-compose.yml ressemble à ceci:

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

J'ai également déclaré les deux noms de domaine .dev à l'intérieur de /etc/hosts sur l'ordinateur hôte (OS X.)

Cela fait longtemps que je n'ai pas configuré les hôtes virtuels. Je croyais comprendre que je devais simplement les déclarer et qu'Apache servirait automatiquement les fichiers appropriés en fonction de l'hôte HTTP demandé.

Voici ce que j'ai ajouté à la fin de 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>

Cependant, dans la pratique, visiter dummy.dev ou tests.dev sert réellement /var/www/html/default. C’est comme si Apache n’avait pas compris quel hôte était appelé (bien que le dump de $_SERVER dans PHP indique la valeur HTTP_Host attendue, c’est-à-dire: 127.0.0.1, dummy.dev ou tests.dev, selon URL que je visite.)

Qu'est-ce que j'ai raté?

Je ne sais pas s'il s'agit d'un problème lié à Apache ou à celui de Docker.

(Veuillez noter qu'il s'agit d'une question différente de la façon d'héberger plusieurs applications sur le même domaine avec un port différent. Dans mon cas, je souhaite que les hôtes virtuels se trouvent tous à l'intérieur/sur la même application/port/conteneur.)

7

Il s'avère que c'était un problème de configuration Apache.

Je devais activer explicitement les hôtes virtuels nommés par domaine, comme ceci:

NameVirtualHost *:80

Cette réponse a aidé.

Docker n'avait rien à voir avec le problème.

2

Le fab/centos n'existe pas dans le docker public, vous ne savez donc pas pourquoi vous rencontrez ce problème.

Ma recommandation serait de prendre du recul et d'essayer de le faire fonctionner avec un exemple simple.

docker search Apache donne eboraas/Apache comme image la plus sélectionnée, je vais donc utiliser celle-ci pour l'exemple.

Dans un répertoire de test, utilisez votre exemple:

Fichier: 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>

Créez ensuite les sites Web vhost et le répertoire des journaux.

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

Enfin, lancez docker.

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

Notez que j'utilise essentiellement les mêmes volumes que dans votre fichier docker-compose.yml, sauf que j'utilise site-available au lieu de changer le fichier httpd.conf.

Pour tester, assurez-vous que tests.dev et dummy.dev sont dans votre/etc/hosts pointant vers la bonne adresse IP de Docker et testez:

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

A partir de là, commencez par essayer l’image Apache du menu fixe que vous utilisez, puis essayez-la avec votre fichier/etc/hosts personnalisé, puis replacez-la dans un fichier de composition

1
creack