Как я могу получить доступ к своему приложению create-реагировать в контейнере, если я привяжу к нему ХОСТ? - PullRequest
0 голосов
/ 02 июля 2018

Мне нужно привязать HOST к моему приложению React в процессе разработки, чтобы я мог использовать прокси для других сервисов в облаке. Допустим, хост - local.myapp.example.com.

Я выполняю свои тесты e2e, запустив пару контейнеров, в том числе один, с экземпляром моего приложения React, а затем заставляя Puppeteer делать запросы к нему. До этого момента приложение было доступно через localhost, просто открыв порт:

// docker-compose.e2e.yml
- ports:
  - 8080:3000 # app is running on 3000 inside the container.

Теперь, когда я связал его с HOST выше, я не могу получить доступ к приложению внутри контейнера. Я обновил /etc/hosts моего ноутбука, чтобы иметь:

// /etc/hosts - laptop
0.0.0.0 local.myapp.example.com

При этом он работает, когда я запускаю приложение на своем ноутбуке, но не работает, когда я запускаю его внутри контейнера

Чего мне не хватает?

Обновление 1

Если я захожу внутрь контейнера, я могу запустить curl local.myapp.example.com:3000, и он работает.

Из другого контейнера (с Puppeteer) я не знаю, какой URL использовать, чтобы поразить его. Перед добавлением HOST я бы просто использовал имя контейнера Docker, например http://frontend:3000, но теперь я не знаю, так как URL не работает

Обновление 2

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

version: '3'
services:
  nginx:
    container_name: nginx
    image: nginx
    depends_on:
      - frontend
      - backend
    volumes:
      - ./frontend.conf:/etc/nginx/conf.d/frontend.conf
    ports:
      - "9520:8080"

  frontend:
    container_name: frontend
    build:
      context: ..
      dockerfile: Dockerfile.e2e
    depends_on:
      - backend

  backend:
    container_name: backend
    image: my.private.registry/user/backend:latest


// reverse proxy conf
server {
  listen 8080;

  location /api {
      proxy_pass         http://backend:3000/api;
      proxy_redirect     off;
      proxy_set_header   Host $host;
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Host $server_name;
  }

  location / {
      # proxy_pass         http://frontend:3000;
      proxy_pass         https://frontend:3000;
      proxy_redirect     off;
      proxy_set_header   Host $host;
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Из Chrome я нажимал http://localhost:9520. Теперь, когда мне нужно связать HOST (а также мне нужно HTTPS=true в моем приложении create-реагировать-приложение), мне нужно нажать http://local.myapp.example.com:9520 из Chrome (не уверен, что https нужно идти сюда?).

Из контейнера обратного прокси я могу сделать curl --insecure --header 'Host: local.myapp.example.com' https://frontend:3000, и он разрешается.

Из Chrome я пытаюсь нажать и http, и https local.myapp.example.com:9520, но это не работает.

От Почтальона, это работает, если я делаю.

Резюме

Мне нужно иметь возможность ударить https://local.myapp.example.com:9520 из Chrome (или Puppeteer) на моем ноутбуке, он должен перейти в контейнер обратного прокси на порту 8080. Обратный прокси-сервер затем proxy_pass отправит его в контейнер frontend через порт 3000.

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