Прокси Docker Nginx: как маршрутизировать трафик

#angular #spring #docker #nginx

#angular #spring #docker #nginx

Вопрос:

У меня есть файл docker compose. Я запускаю 3 контейнера (nginx, postgresql и java app)

Все контейнеры созданы. Моя проблема в том, что когда я хочу получить доступ к своему приложению, я использую этот URL: http://10.34.18.2:81/myProject но у меня ничего нет.

Что не так с моим conf или моим yaml файлом?

файл yaml:

 version: '2'
services:
    nginx:
        image: 'nginx:latest'
        container_name: production_nginx
        volumes:
            - './nginx.conf:/etc/nginx/nginx.conf'
            - './nginx/error.log:/etc/nginx/error_log.log'
            - './nginx/cache/:/etc/nginx/cache'
        ports:
            - '81:80'
            - '444:443'
    myProject-postgresql:
        image: 'postgres:10.4'
        environment:
            - POSTGRES_USER=myProject
            - POSTGRES_PASSWORD=myProject
        ports:
            - '5432:5432'
    myProject-app:
        image: myProject
        environment:
            - '_JAVA_OPTIONS=-Xmx512m -Xms256m'
            - 'SPRING_PROFILES_ACTIVE=prod,swagger'
            - 'SPRING_DATASOURCE_URL=jdbc:postgresql://myProject-postgresql:5432/myProject'
            - JHIPSTER_SLEEP=10
        ports:
            - '8081:8080'
  

nginx conf:

 server {

  listen 81 default_server;
  listen [::]:81 default_server;
  server_name localhost;

  location /myProject {
    proxy_pass http://10.34.18.2:8081/;
    rewrite ^/myProject(.*)$ $1 break;
  }
}

  

Комментарии:

1. В вашем docker compose у вас есть, 81:80 в котором говорится, что с хоста все, что поступает на порт 81, будет перенаправляться на порт 80 контейнера nginx docker. В вашей конфигурации nginx вы говорите, что прослушивать порт 81 нельзя 80 . Также неверен ваш прокси-сервер.

2. @ShawnC. Я должен изменить номер порта, но когда я использую этот URL http://10.34.18.2:81/myProject , у меня появляется это сообщение -> This site is inaccessible

3. Ну, 10.34.18.2 это внутренний сетевой адрес docker, который может быть вашим приложением, а может и не быть, но на нем наверняка запущено ваше приложение 8080 . Вы должны делать http://myProject-app:8080 так, чтобы контейнер выполнял поиск в dns, чтобы найти ваше приложение.

4. @ShawnC. 10.34.18.2 не является ли IP-адрес моего сервера внутренним сетевым адресом docker

5. Ваш контейнер nginx указывает на приложение? Если да, измените порты приложения на — 8080 и укажите прокси-сервер nginx на 10.34.18.2:8080