• Docker
  • Docker > redirection de port spécifique pour un sous-domaine

Bonjour à tous,

J'aimerais vous soumettre un petit problème que je rencontre et que je n'ai toujours pas réussi à résoudre. Tout d'abord, je précise que j'utilise docker-compose pour gérer mes containers docker. Voici un docker-compose de test dans lequel j'ai enlever les services web utilisant le port 80 mais on va considérer qu'ils sont là (contrainte du problème) :

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - mynetwork

# setup & docs : https://github.com/gogits/gogs/tree/master/docker
  gogs:
    image: gogs/gogs
    container_name: gogs
    ports:
      - "10022:22"
      - "3000:3000"
    volumes:
      - /home/mydata/gogs:/data:rw
    environment:
      - VIRTUAL_HOST=git.localhost
      - VIRTUAL_PORT=3000
    networks:
      - mynetwork

networks:
  mynetwork:

Donc l'idée est simple. En plus de mes services web classique (qui sont sur le :80), j'aimerai mettre en place un Gogs (et non, on ne me fera pas installer un GitLab 😁) qui écoute - pour la partie UI - sur le port 3000.
Etant un peu perfectionniste, je n'ai pas envie que l'on tape un gogs.domaine.com:3000 à chaque fois. un gogs.domaine.com (sur le 80 donc) serait l'idéal.
En mode nginx non dockerisé, un ajout dans la conf d'un proxy-pass pour mapper le port 80 sur le 3000 pour ce sous-domaine précis, ça marche. Mais dans le cadre d'un ensemble en containers, je sèche.
Y a-t-il un paramètre que dont je n'ai pas connaissance pour se faire ? Est-il possible d'ajouter (à l'aide d'une commande de démarrage dans le docker-composer) une configuration "manuelle" spécifique au nginx-proxy ?
J'ai tenté le

"sous.domaine.com:80:3000"

dans la section "ports:" du service "gogs" mais il n'accepte que les valeurs numérique. C'est-à-dire "127.0.0.1:80:3000" ou "0.0.0.0:80:3000" mais ça ne fait pas l'affaire car on a déjà un "80:80" définit pour le service nginx-proxy (en passant, les valeurs alphanumérique sont automatiquement convertie en 0.0.0.0 dans la section "ports").

Si l'un de vous a une piste, je suis tout ouïe.
En espérant vous poser une petite colle (et non passer pour un demeuré 😆).
Bien à vous

    Tintwo Tu as déjà ta réponse 😉

    En mode nginx non dockerisé, un ajout dans la conf d'un proxy-pass pour mapper le port 80 sur le 3000 pour ce sous-domaine précis, ça marche.

    Donc tu as juste a dockeriser ce nginx et a lui mapper les ports 80 et 443 dehors, pour les autres applications tu ne map pas leurs ports ou alors uniquement en local et le tour et jouer 😉
    Juste une question (ne le prend pas mal ! ) (et j'imagine que tu sais ce que c'est 😅 ) sais tu ce qu'est un reverse-proxy ?

      Dryusdan Salut,

      Alors oui bien entendu que je sais ce qu'est un reverse-proxy range la batte cloutée
      Je l'utilise dans ce contexte pour une raison particulière 😉

      Mais franchement, "dockeriser" un nginx custom ça m'embête un peu. Le but est quand même d'avoir une architecture qui soit la plus simple d'utilisation possible avec le minimum d'effort.

      Du coup, j'en suis plutôt à chercher comment ajouter une config spécifique (typiquement, un virtual host contenant un proxy-pass) au service nginx-proxy à l'aide d'une commande à inclure au démarrage du container (et ce, peut importe si ça doit être un fichier de conf à greffer à la conf existante dans le container).

        Hum, j'avais zappé l'image de xataz au profir de jwilder pour une question de start/popularity.
        Je vais voir à réviser mon jugement.

        J'imagine que ce dont tu parles (qui est aussi ce dont j'ai besoin) s'apparente à la propriété "reverse.backend.port=monport" dans les "label:" ?

        Je vais zieuter ça et vous tiens au courant.
        Merci 🤓

        "reverse.backend.port=monport" dans les "label:" ?

        Exact 😉
        Et tutoie moi, je suis pas vieux, j'ai même pas quitté l'école x)

        Hé hé le vous c'était pour tous ceux qui lisent, pas seulement "toi" 😁
        Eh oui, parce que je pense que je suis pas le seul gugus à vouloir faire un truc de ce genre et à buter dessus 😁

        Merci Dryusdan,

        Du coup j'ai investigué plus longuement et il s'avère que je me suis fait avoir par une histoire de cache 😑
        Du coup, voici ce qu'il me manquait :

        environment:
          - VIRTUAL_HOST=git.localhost
          - VIRTUAL_PORT=3000
          - HTTP_PROXY=http://git.localhost:80

        Du coup le HTTP_PROXY, en précisant le port, va créer en interne le proxy_pass tant recherché vers le port 3000 (qui est exposé par le container)

        (Eh oui, désolé pour xataz mais les images de jwilder envoient aussi du paté 😇 mais évidemment quand la doc n'est pas claire...)

        Bah voilà aussi 🙂

        J'utilise celle de @xataz sur mon serveur avec letsencrypt ça déchire 😛

        Répondre…