Я новичок в компьютерных сетях и Docker и пытаюсь развернуть и запустить небольшое приложение FastAPI с помощью Docker. Приложение работает успешно, когда я запускаю его локально с помощью Uvicorn, но не запускается, когда я пытаюсь развернуть его с помощью Docker. Ниже приведено сообщение об ошибке. Моя ОС — Windows. Я получаю:
источник/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
Вот мой Dockerfile
FROM python:3.10-slim
WORKDIR /code
COPY ./requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY ./src ./src
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "80", "--reload"]
Вот команды, которые я использовал в терминале:
docker build -t fastapi-image .
docker run --name fastapi-container -p 80:80 fastapi-image
вот мой журнал докера:
INFO: Will watch for changes in these directories: ['/code']
INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
INFO: Started reloader process [1] using StatReload
INFO: Started server process [8]
INFO: Waiting for application startup.
INFO: Application startup complete.
моя файловая структура:
requirements.txt
Dockerfile
src
|--main.py
требования.txt
fastapi
uvicorn
Эта ссылка помогает? stackoverflow.com/questions/60132045/… Это может быть проблемой, если вы укажете 0.0.0.0 — попробуйте localhost или 127.0.0.1, как сказано в журнале докера.
Прошу прощения, но я обнаружил, что разместил неправильный файл журнала Docker. Я уже отредактировал свое сообщение, чтобы оно соответствовало правильному файлу журнала Docker. Несмотря на то, что я попробовал оба ваших решения, они мне все равно не помогли.
Когда вы изменили 0.0.0.0 на 127.0.0.1, вы получили точно такую же ошибку, ERR_ADDRESS_INVALID
? Если нет, то на какую ошибку это изменилось?
для 0.0.0.0 я получил «ERR_ADDRESS_INVALID», но для 127.0.0.1 я получил «ERR_EMPTY_RESPONSE».
ваш код работает нормально... http://localhost/
... или используйте curl http://localhost/
... как видно с моего ноутбука с Ubuntu
Как уже говорили другие, 0.0.0.0
— это действительный адрес прослушивания, но неверный адрес подключения. 0.0.0.0
означает, что сервер должен прослушивать «все адреса на интерфейсах». 127.0.0.1
и localhost
— локальный («петлевой») интерфейс вашей собственной машины.
Может у вас что-то противоречивое? Нажмите docker container ls
(это эль, а не «и») и убедитесь, что ничего не указано. Затем попробуйте подключиться и убедитесь, что вы получили ERR_CONNECTION_REFUSED
или что-то подобное. Затем перезапустите свой докер-контейнер (docker run --name fastapi-container -p 80:80 fastapi-image
) и посмотрите, работает ли он теперь, когда вы пытаетесь перейти к 127.0.0.1
Возможно, этот ответ окажется для вас полезным.
Воспроизведя проблему, вы можете увидеть результат на localhost:80
.
См. также эти посты, чтобы узнать больше о различиях между localhost
и 0.0.0.0
:
Как выглядит журнал докера при запуске контейнера? А файловая структура в докер-контейнере?