docker-compose: как изолировать Docker-контейнер "снаружи" (контейнер jenkins + обратный прокси-сервер nginx) - PullRequest
0 голосов
/ 26 сентября 2019

В качестве учебного макета я пытаюсь настроить экземпляр jenkins за обратным прокси-сервером nginx, обеспечивающим также https.Поэтому я создаю один контейнер для nginx и один для jenkins.Я преуспел, включая конфигурацию nginx с (автоматически подписанными) сертификатами.Я могу связаться с экземпляром jenkins, используя https и igin контейнера nginx с моей машины.Но моя конечная цель - полностью изолировать контейнер Дженкинса, чтобы он вообще не был доступен снаружи.И это не достигнуто.Порт по умолчанию, объявленный в официальном образе 8080, я все еще могу получить доступ к экземпляру jenkins с IP-адресом контейнера jenkins и портом 8080.

Я сделал первую установку через ANSIBLE PlayBook, используя Docker-контейнер иработал хорошо.Но я не могу получить то же самое поведение с docker-compose.Вот файл docker-compose, который я написал.

version: "3.5"

services:
  revproxy:
    image: nginx:alpine
    depends_on:
      - jenkins_ci
    networks:
      - proxy
    ports:
      - "90:8080"
      - "443:443"
    volumes:
      - /home/vagrant/dockerResources/etc/certs:/etc/nginx/certs
      - /home/vagrant/dockerResources/etc/nginx/conf.d/reverse_proxy.conf:/etc/nginx/conf.d/reverse_proxy.conf
  jenkins_ci:
    image: jenkins/jenkins:lts
    networks:
      - proxy
networks:
  proxy:
    name: revProxy
    internal: yes

При проверке контейнера jenkins_ci я могу найти его IP и направить браузер на этот IP с портом 8080. Это я не хочусделать.Я бы хотел, чтобы контейнер jenkins был доступен только через обратный прокси-адрес nginx.

Если бы кто-то мог дать мне подсказку.

1 Ответ

0 голосов
/ 26 сентября 2019

Я наконец нашел решение своей проблемы.Зная, что порт по умолчанию для образа jenkins по умолчанию - 8080, я установил:

ports:
  - "8080"

в определении сервиса jenkins_ci в файле docker-compose.

Теперь я вижу, что естьбольше нет IP-адреса для контейнера jenkins_ci.Тем не менее, он остается доступным из другого контейнера (здесь, nginx) благодаря имени службы (так jenkins_ci).

Я нашел решение в этом вопросе .

К сожалению, объявление открытого номера порта без его открытого аналога для сокрытия открытого порта (и, следовательно, IP-адреса, если вообще нет открытого порта) не вызывается в разделе синтаксиса docker-compose port .

...