Доступ к приложению Angular, обслуживаемому в докере, проксированном через nginx - PullRequest
1 голос
/ 26 сентября 2019

У меня есть VirtualBox с docker-compose, настроенным для запуска приложения Angular, и nginx для решения коллизии портов с другим приложением (вне рамок вопроса).Я могу правильно связаться с приложением на хост-машине (через http://localhost:90/angularApp),, но не могу правильно связаться с внешней машиной, так как angular не может правильно найти нужные ему статические файлы.

Я пыталсяигра с различными настройками в nginx's development.conf (так как я полагаю, что именно здесь я должен правильно настроить среду) и угловыми параметрами 'serve' (в основном, 'baseHref'), но любое из приложений будет работать только через localhost: 4200 (native angular) и localhost: 90 / angularApp (прокси-сервер nginx), или только через первый.

Я также попробовал google-fu, но не нашел ничего, что могло бы помочь в этом сочетании среды докера имаршрутизация

Вот мои конфигурационные файлы:

project / docker / angular / DockerFile

FROM node:12.2.0

WORKDIR /app

ENV PATH /app/node_modules/.bin:$PATH

project / docker / nginx / development.conf

server {
    listen                  80;
    server_name             nginx;

    proxy_next_upstream     error timeout invalid_header http_500 http_502 http_503;
    proxy_set_header        Host $host;

    location /angularApp {
        proxy_pass   http://myApplication:4200/;
    }
}

project / docker-compose.yml

version: "2.1"
services:
  nginx:
    image: nginx
    ports:
      - "90:80"
    volumes:
      - ./docker/nginx:/etc/nginx/conf.d
    networks:
      - back

  myApplication:
    build: ./docker/angular/
    command: bash -c "npm i && ng serve --host 0.0.0.0 --baseHref http://localhost:90/angularApp/" <-- I know this can't work when I'd access from another machine
    working_dir: /app
    volumes:
      - ./myApplication:/app    
    ports:
      - "4200:4200"
    networks:
      - back

networks:
  back:    
    driver: bridge

Основная ошибка заключается в том, что когда для местоположения задано значение "/ angularApp" [hostIp]: 90 / angularApp не может его найтиs собственные статические файлы (GET http://localhost:90/angularApp/runtime.js net::ERR_CONNECTION_REFUSED angularApp:11), хотя доступ с гостевой машины работает нормально, но я не понимаю, что я должен использовать в baseHref и в конфигурации местоположения nginx, чтобы сделать myApplication доступным извне.

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

(я также знаю, что самым простым обходным решением будетперенаправить все запросы localhost на удаленную машину, так как это виртуальная машина на моей собственной машине, но мне это показалось подвохом)

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