Докер сочинять nginx и tomcat, выставлять только nginx в интернете - PullRequest
0 голосов
/ 28 августа 2018

Я работаю с составным файлом Docker для создания контейнера nginx и tomcat. nginx будет использоваться в качестве обратного прокси, поэтому он получит доступ к коту. Мне удалось сделать это успешно с 2 отдельными кондиенерами, используя лазурные контейнеры. вы нажимаете URL-адрес nginx и затем перенаправляетесь на tomcat securley, так как nginx имеет HTTPS и сертификаты. Пока все в порядке. Но проблема в том, что если вы обращаетесь по отдельности, то tomcat Ip по http может также получить доступ к контейнеру, и это небезопасно. Я просто хочу, чтобы у tomcat был доступ через nginx. Как этого достичь? Сейчас я пытаюсь использовать docker compose, и я знаю, что контейнеры будут использовать одну и ту же сеть и могут соединяться друг с другом, но как мне добиться того, чтобы nginx подключался к Tomcat, и доступ к tomcat возможен только путем перенаправления nginx через https и этот tomcat не может получить доступ по http индивидуально. Это YML у меня есть, но я не знаю, как управлять портами, чтобы добиться того, чего я хочу. Это возможно?

    version: '3.1'
services:

  tomcat:
    build:
      context: ./tomcat
      dockerfile: Dockerfile
    container_name: tomcat8
    image: tomcat:search-api
    ports:
      - "8080:8080"

  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    container_name: nginx
    image: nginx:searchapi
    depends_on: 
    - tomcat 
    ports:
      - "80:80"
      - "443:443"

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Удалите только порты, выставленные в вашем файле docker-compose в сервисе tomcat, обратный прокси будет работать с внутренней сетью докера, используя ваш собственный файл nginx.conf со ссылкой на контейнер и внутренним портом контейнера tomcat, здесь я прилагаю пример:

  version: '3.1'
    services:

      tomcat:
        # build:
        #   context: ./tomcat
        #   dockerfile: Dockerfile
        container_name: tomcat8
        image: tomcat:search-api

      nginx:
        build:
          context: ./nginx
          dockerfile: Dockerfile
        container_name: nginx
        image: nginx:searchapi
        links:
          - "tomcat"
        volumes:
          - ./proxyConf:/etc/nginx/conf.d
        depends_on: 
        - tomcat 
        ports:
          - "80:80"
          - "443:443"

proxyConf / default.conf file:

server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://tomcat:8080;
  }
}

При прохождении через прокси я добавляю соединение docker-compose tomcat с внутренним портом контейнера tomcat.

Это мое дерево направлений:

C:.
│   docker-compose.yml
│
├───nginx
│       Dockerfile
│
├───proxyConf
│       default.conf
│
└───tomcat
        Dockerfile
0 голосов
/ 28 августа 2018

Используя опцию ports в вашем docker-compose, вы открываете этот порт извне. Если вы удалите опцию портов из tomcat, она все равно должна работать, поскольку контейнер должен предоставлять порт 8080 только для внутренней сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...