Невозможно получить доступ к приложению Node через обратный прокси-сервер с помощью Nginx в контейнерах Docker.

У меня есть 2 отдельных контейнера Docker: приложение Node и Nginx, работающие локально на компьютере с Windows. Оба контейнера запущены и работают, но я не могу получить доступ к моему приложению Node через обратный прокси-сервер, который я настроил в Nginx:

Контейнер приложения Node запускается с помощью следующей команды:

docker run -p 2020:2020 --name nodeapp myimage:1.0

Приложение Node доступно по адресу localhost:2020 URL

Для контейнера Nginx я использую

docker run -p 7070:80 --name nginx mynginx:1.0

Nginx доступен по адресу localhost:7070

Ниже мой файл конфигурации nginx:

default.conf

upstream nodeserver {
  server 127.0.0.1:2020;
}
server {  
  location / {
    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_Proto $scheme;
    proxy_pass http://nodeserver;
  }
}

Что я делаю неправильно?

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

127.0.0.1 изнутри докер будет разрешать свой собственный локальный хост, а не локальный хост Windows.

Обновите server 127.0.0.1:2020; до server <Windows server IP>:2020;. Он должен работать.

Теперь все работает, спасибо, что указали на ошибку. Есть ли способ удалить порт, потому что в настоящее время я обращаюсь к localhost:7070, поэтому я могу удалить 7070 любым способом.

Digvijay 11.11.2022 09:35

Отлично, что это сработало для вас. Чтобы исключить доступ NGINX с помощью localhost:7070, сопоставьте его с портом 80, чтобы http://localhost разрешил порт 80.

Abhishek S 11.11.2022 09:38

Что я сопоставляю вот так docker run -p 7070:80 --name nginx mynginx:1.0 во время запуска контейнера nginx.

Digvijay 11.11.2022 09:40
docker run -p <hostport>:<containerport> — это синтаксис. Значит, надо docker run -p 80:80 заставить его слушать http://localhost
Abhishek S 11.11.2022 09:43

Что, если я разверну эти два контейнера через AWS ECS, тогда для этого потребуется IP-адрес удаленного сервера вместо IP-адреса Windows, правильно ли это?

Digvijay 11.11.2022 09:48

Если оба контейнера находятся в одной сети докеров, вы можете использовать имя контейнера. В данном случае это может быть nodeapp:2020

Abhishek S 11.11.2022 09:50

Одна и та же сеть докеров означает один и тот же кластер в ECS. Если оба находятся внутри одного и того же кластера, мы можем соединить их по именам.

Digvijay 11.11.2022 10:56

Если это настройки по умолчанию, то должно работать. Также в кластере могут быть дополнительные сети. Вы можете проверить сети в своем кластере с помощью команды docker network ls.

Abhishek S 11.11.2022 10:58

Согласно предыдущему ответу да, вы должны использовать Windows ip. Докер взаимодействует друг с другом со своими контейнерами, используя IP-адрес локального хоста, но вне контейнера вы должны использовать IP-адрес Windows, который должен быть:

192.168.99.100

Что, если я разверну эти два контейнера через AWS ECS, тогда потребуется IP-адрес удаленного сервера, как я понимаю.

Digvijay 11.11.2022 09:37

Другие вопросы по теме