Docker s’exécute sur des sous-domaines

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; } }