Docker nginx-proxy: прокси между контейнерами

В настоящее время я работаю над стеком разработки с использованием Docker-Compose в своей компании, чтобы предоставить разработчикам все, что им нужно для кодирования наших приложений.

Это включает, в частности:

контейнер Gitlab (sameersbn / gitlab) управлять частными GIT-репозиториями,контейнер Дженкинса (библиотека / Jenkins) для построения и непрерывной интеграции,контейнер Archiva (ninjaben / Archiva-докер) управлять репозиториями Maven.

Чтобы защитить сервисы через HTTPS и показать их внешнему миру, я установил отличный контейнер nginx-proxy (jwilder / Nginx-прокси), которая позволяет автоматизировать настройку прокси-сервера nginx с использованием переменных среды в контейнерах и автоматического перенаправления HTTP на HTTPS.

DNS настроен для сопоставления каждого общедоступного URL-адреса докеризованных сервисов с IP-адресом хоста.

Наконец, используя Docker-Compose, мой файл docker-compose.yml выглядит так:

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - /var/config/nginx-proxy/certs:/etc/nginx/certs:ro
  postgresql:
    # Configuration of postgresql container ...
  gitlab:
    image: sameersbn/gitlab
    ports:
    - "10022:22"
    volumes:
    - /var/data/gitlab:/home/git/data
    environment:
    # Bunch of environment variables ...
    - VIRTUAL_HOST=gitlab.my-domain.com
    - VIRTUAL_PORT=80
    - CERT_NAME=star.my-domain.com
  archiva:
    image: ninjaben/archiva-docker
    volumes:
    - /var/data/archiva:/var/archiva
    environment:
    - VIRTUAL_HOST=archiva.my-domain.com
    - VIRTUAL_PORT=8080
    - CERT_NAME=star.my-domain.com
  jenkins:
    image: jenkins
    volumes:
    - /var/data/jenkins:/var/jenkins_home
    environment:
    - VIRTUAL_HOST=jenkins.my-domain.com
    - VIRTUAL_PORT=8080
    - CERT_NAME=star.my-domain.com

Для рабочей станции разработчика все работает как положено. Можно получить доступ к услугам разницы черезhttps://gitlab.my-domain.com, https://repo.my-domain.com а такжеhttps://jenkins.my-domain.com.

Проблема возникает, когда одна из служб Dockerized получает доступ к другой службе Dockerized. Например, если я пытаюсь получить доступhttps://archiva.my-domain.com от Дженкинса Докера, я получу ошибку тайм-аута от прокси.

Кажется, что даже еслиarchiva.my-domain.com определяется как общедоступный IP-адрес хоста из контейнера Docker,запросы, поступающие от докеризованных сервисов, не передаются через прокси-сервер nginx.

Насколько я понял, docker-nginx обрабатывает запросы, поступающие из хост-сети, но не заботится о запросах, поступающих из внутренней контейнерной сети (_dockerconfig_default_ для стека Docker-Compose).

Вы могли бы сказать, зачем мне использовать прокси из контейнера? Конечно, я мог бы использовать URLhttp://archiva:8080 из контейнера Дженкинс, и это будет работать. Но такая конфигурация не масштабируется.

Например, используя сборку Gradle для компиляции одного приложения, build.gradle должен объявить мой частный репозиторий черезhttps://archiva.my-domain.com, Это будет работать, если сборка запускается с рабочей станции разработчика, но не через контейнер jenkins ...

Другим примером является аутентификация в Jenkins с помощью службы OAuth GitLab, где должен использоваться тот же URL-адрес, что и для аутентификации GitLab.и то и другое доступны снаружи и внутри контейнера Jenkins.

Мой вопрос вот тогда:Как настроить nginx-proxy для прокси запроса от контейнера к другому контейнеру?

Я не видел ни одной темы, обсуждающей эту проблему, и я недостаточно понимаю проблему, чтобы построить решение на конфигурации nginx.

Любая помощь могла бы быть полезна.

Ответы на вопрос(1)

Ваш ответ на вопрос