Le meilleur moyen d’exécuter deux applications de composition de station d’accueil derrière nginx sur une seule machine hôte?

J’ai deux applications de composition de docker:

  • a.com
  • b.com

Je veux les exécuter tous les deux sur la même machine hôte et placer un proxy de conteneur nginx pour acheminer les demandes entrantes vers les services corrects de chacune des applications docker-compose.

Je pense que je dois avoir un conteneur nginx unique qui s’exécute séparément des deux applications composées dans Docker. J’ai déjà utilisé nginx-proxy , mais mon routage est devenu plus complexe, alors je veux lancer ma propre instance nginx maintenant.

  • Je ne peux pas travailler sur la mise en réseau des deux applications et du conteneur nginx pour que tout fonctionne de manière saine.
  • Quand je host not found in upstream "MY_CONTAINER_HOST_NAME" , docker run le conteneur nginx que host not found in upstream "MY_CONTAINER_HOST_NAME" :
  • Je peux poster ma configuration nginx si besoin est, mais c’est vraiment une question de mise en réseau de dockers / de bonnes pratiques.

nginx-proxy devrait être suffisant, à condition qu’il prenne en charge un réseau attaché à un docker swarm ( problème 520 , toujours en attente)

Vous pouvez également considérer vfarcic/docker-flow-proxy , un moyen simple de reconfigurer le proxy chaque fois qu’un nouveau service est déployé ou lorsqu’un service est mis à l’échelle.

Voir ” Intégration du proxy avec Docker Swarm (série Tour Around Docker 1.12) ” pour un exemple concret.

Je peux penser à 2 options pour cela:

Premier:

Exécutez les applications et nginx dans le même réseau défini par l’utilisateur docker. Pour ce faire, vous devez d’abord créer un réseau défini par l’utilisateur:

 docker network create appnet 

Ensuite, changez vos fichiers Docker pour utiliser le réseau Appnet comme externe (les réseaux externes ne créeront pas de réseau et utiliseront les réseaux existants)

Seconde:

Créez 2 réseaux définis par l’utilisateur, nommés appnet1 et appnet2, connectez a.com à appnet1 et b.com à appnet2 marqué comme réseau externe dans docker-compose. Ensuite, ouvrez le nginx et attachez-le à la fois à appnet1 et à appnet2.

Quand je fixe le dock, lancez le conteneur nginx que j’obtiens:

Remarque: les réseaux définis par l’utilisateur fournissent un DNS interne. Vous pouvez donc appeler des conteneurs sur le même réseau par nom de conteneur.

Exemple de réseau externe:

Si vous souhaitez que vos conteneurs rejoignent un réseau préexistant, utilisez l’option externe:

 networks: default: external: name: my-pre-existing-network 

Au lieu d’essayer de créer un réseau appelé [projectname] _default, Compose recherchera un réseau appelé my-pre-exist-network et y connectera les conteneurs de votre application.