Приложение, запускаемое из контейнера Docker выдает 502 ошибку

Есть простое приложение фулл-стак на Python, формирует из набора заданных вопросов случайным образом тест и сохраняет результаты в БД. Регистрация и авторизация, аутентификации юзеров. Бекенд fastapi, фронт html, css, немного js. Используются шаблоны Jinja. В общем локально, при запуске с машины, все работает - при переходе на 127.0.0.1:8000 выдает индекс.хтмл, и так далее. Проблемы начались когда все это ушло в докер-контейнеры - фронтенд контейнер на 80:80 стабильно выдает 502 и ломится на 127.0.0.1:8000. Бэкэнд-контейнер на 0.0.0.0:8000 работает, на 127.0.0.1:8000 - ни в какую. Файлы: докер фронт (я подозреваю, что такой "фронт", вся суть которого установить nginx, скопировать конф файл и перенаправить с 80 на локалхост можно было вместе с беком в один контейнер упаковать, но сходу не вышло - в докере я совсем никак):

FROM nginx:latest
RUN apt-get update && apt-get install -y nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf

докер бэк:

FROM python:latest
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000", "--access-logfile", "-", "--error-logfile", "-", "main:app"]

Нжинкс.конф:

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://localhost:8000;
        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;
    }
}

ямл:

services:
  web:
    build: ./templates
    restart: always
    ports:
      - "80:80"
    networks:
      - my-network
    depends_on:
      - python_app

  python_app:
    build: .
    restart: always
    ports:
      - "8000:8000"
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

Куда копать?


Ответы (1 шт):

Автор решения: dahoonpao

Нужно явно указать адрес контейнера, то что вы указываете localhost - вы указываете на адрес машины на которой запущен докер, нужно указать адрес контейнера + порт.

→ Ссылка