Mon objective est de déployer plusieurs applications Web et d’y accéder via des sous-domaines, je les exécute actuellement sur différents ports, j’ai nginx sur le serveur et les conteneurs exécutent apache.
docker run -p 8001:80 -d apache-test1 docker run -p 8002:80 -d apache-test2
et je suis en mesure d’y accéder en allant à
http://example.com:8001
ou http://example.com:8002
Mais j’aime bien y accéder via des sous-domaines
http://example.com:8001 -> http://test1.example.com http://example.com:8002 -> http://test2.example.com
J’ai nginx en cours d’exécution sur le serveur avec les parameters de serveur suivants
server { server_name test1.anomamedia.com; location / { proxy_redirect off; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_pass http://localhost:8001; } } server { server_name test2.anomamedia.com; location / { proxy_redirect off; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_pass http://localhost:8002; } }
Si c’est de votre aide c’est mon Dockerfile
FROM ubuntu RUN apt-get update RUN apt-get -y upgrade RUN sudo apt-get -y install apache2 php5 libapache2-mod-php5 # Install apache, PHP, and supplimentary programs. curl and lynx-cur are for debugging the container. RUN DEBIAN_FRONTEND=noninteractive apt-get -y install apache2 libapache2-mod-php5 php5-mysql php5-gd php-pear php-apc php5-curl curl lynx-cur # Enable apache mods. RUN a2enmod php5 RUN a2enmod rewrite EXPOSE 80 # Copy site into place. ADD html /var/www/html # Update the default apache site with the config we created. ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf # By default, simply start apache. CMD /usr/sbin/apache2ctl -D FOREGROUND
J’ai des problèmes similaires. Aussi, j’ai souvent besoin d’append et de supprimer des conteneurs, donc je ne souhaite pas éditer nginx conf à chaque fois. Ma solution utilisait jwilder / nginx-proxy.
il suffit alors de lancer des conteneurs avec un port exposé ( --expose 80
, pas -p 80:80
) et d’append des variables env:
-e VIRTUAL_HOST=foo.bar.com
N’oubliez pas de transférer avec votre trafic nginx principal avec les en-têtes de droite:
server { listen 80;# default_server; #send all subdomains to nginx-proxy server_name *.bar.com; #proxy to docker nginx reverse proxy location / { proxy_set_header X-Real-IP $remote_addr; #for some reason nginx proxy_set_header Host $http_host; #doesn't pass these by default proxy_pass http://127.0.0.1:5100; } }