Суть проблемы:
При запуске fastapi приложения без докер контейнера, все работает норм - nginx успешно перенаправляет запросы в запущенную через uvicorn приложуху, запросы корректно обрабатываются. Если я запускаю это приложение через докер контейнер - nginx возвращает ошибку 502.
Логи докер контейнера пустые.
В логах nginx:
[error] 539740#539740: *9485 recv() failed (104: Unknown error) while reading response header from upstream, client: 140.82.115.168, server: myhost.ru, request: "POST /test HTTP/1.1", upstream: "http://127.0.0.1:8001/test", host: "myhost.ru"
Настройки nginx:
server {
listen 80;
listen [::]:80;
server_name myhost.ru www.myhost.ru;
location /test {
proxy_pass http://127.0.0.1:8001;
}
}
Dockerfile:
FROM python:3.11-alpine
WORKDIR /app
ENV PYTHONUNBUFFERED 1
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY src/main.py .
CMD ["uvicorn", "main:app", "--port", "8001"]
Сборка образа:
docker build --network=host -t my_test_app .
(Использую '--network=host' потому что без него либы не грузяться с pypi, тоже не понятно почему...)
Запуск контейнера:
docker run -d --rm -p 8001:8001 my_test_app
Если я запускаю контейнер такой командой, то в логах контейнера пусто, в логах nginx 502 bad gateway.
Порт вроде пробросил к контейнеру правильно, видимо нужно еще что-то куда-то дописать...
Я попробовал запустить контейнер так:
docker run -d --rm --network host my_test_app
С флагом '--network host' все работает корректно. Но пишут в интернетах что так лучше не делать.
Что я не так сделал?