Мои настройки следующие:
- Серверная часть: Flask сервер работает на порту 5000; реализовано в python
- Интерфейс: Реагирует приложение, отправляющее http-запросы бэкэнду
- Оба докеризируются и работают на одном узле с использованием 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
.
Кто-нибудь знает, почему имя не может быть разрешено при доступе к странице с другого компьютера?