@wintreist

Почему не могу пропинговать приложение в докере?

Работаю на Windows 10, если это имеет значение
Написал такой пример:
import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {
        "Hello world!"
    }

if __name__ == "__main__":
    uvicorn.run(
        app="main:app",
        port=7771,
        reload=True,
    )

Запускаю локально - работает, могу подключаться по 127.0.0.1:7771
Dockerfile
FROM python:3.12.7
WORKDIR /mnt/vm_hub/server
COPY pyproject.toml ./
COPY poetry.lock ./
COPY .env ./
# COPY ./main ./main

RUN pip install poetry
RUN poetry config virtualenvs.create false
RUN poetry install

CMD [ "python", "main/main.py" ]

compose.yaml
services:
  server:
    build: ./server
    ports:
      - "7771:7771"
    volumes:
      - ./server/main:/mnt/vm_hub/server/main

Через vs code запускаю compose.yaml
docker compose -f "compose.yaml" up -d --build
Всё запускается, сервер внутри работает, но по 127.0.0.1:7771 я не могу к нему подключиться
В браузере следующее:
Страница недоступна
Сайт localhost не отправил данных.
ERR_EMPTY_RESPONSE


Я не понимаю, что не так?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@wintreist Автор вопроса
Проблема была в этом:
if __name__ == "__main__":
    uvicorn.run(
        app="main:app",
        port=7771,
        reload=True,
    )

Надо чтобы был указан хост 0.0.0.0
После этого по localhost:7771 я смог подключиться
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Viji
@Viji
DevOps Engineer
как вариант в compose поставить driver как host network - так даже лучше будет

https://docs.docker.com/engine/network/drivers/
https://docs.docker.com/reference/compose-file/net...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы