Приложение, запускаемое из контейнера 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 шт):
Нужно явно указать адрес контейнера, то что вы указываете localhost
- вы указываете на адрес машины на которой запущен докер, нужно указать адрес контейнера + порт.