Веб-страница хостинга с nginx внутри docker -композит: Не удается разрешить имя хоста - PullRequest
0 голосов
/ 01 мая 2020

Мои настройки следующие:

  1. Серверная часть: Flask сервер работает на порту 5000; реализовано в python
  2. Интерфейс: Реагирует приложение, отправляющее http-запросы бэкэнду
  3. Оба докеризируются и работают на одном узле с использованием docker -compose

Мой docker -компонентный файл:

version: "3"
services:
  backend:
    ports:
      - "5000:5000"
    image: <backend-image>

  frontend:
    depends_on:
      - backend
    ports:
      - "80:80"
    links:
      - "backend:backend-python"
    image: <frontend-image>

nginx .conf

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri /index.html;                 
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

С внешнего интерфейса я отправляю запросы на http://backend-python:5000/<my-endpoint>. backend-python определен в спецификации внешнего интерфейса в docker -compose как имя хоста бэкэнда. Когда я запускаю docker-compose up локально и открываю localhost в браузере, страница отображается должным образом. Когда я запускаю docker-compose up на Raspberry Pi 3, интерфейс не может разрешить http://backend-python:5000/<my-endpoint>, когда я открываю страницу локально на своем ноутбуке.

Я также пытался заменить nginx обслуживанием сборки, используя serve. Это приводит к тому же поведению, как описано выше.

Из поиска в Google мне кажется, что использование docker -compose создает свою собственную сеть, в которой каждый контейнер можно найти по его имени или именам, определенным в links.

Кто-нибудь знает, почему имя не может быть разрешено при доступе к странице с другого компьютера?

1 Ответ

1 голос
/ 01 мая 2020

Приложение веб-интерфейса работает внутри браузера, и когда приложение веб-интерфейса пытается получить доступ к API, именно браузер пытается связаться с ним.

Когда вы размещаете приложение веб-интерфейса внутри docker с помощью nginx, все, что делает контейнер - это сервер stati c файл, необходимый для браузера, но не nginx пытается связаться с вашим API.

Вот почему ваш браузер не может получить доступ к ваш бэкэнд, используя имя контейнера, вам нужно выставить свой API и изменить URL API / бэкэнда в вашем приложении, чтобы использовать http://localhost:5000.

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