Ошибка подключения к 127.0.0.1 на порту 5000: соединение отклонено при использовании Flask

Вопрос или проблема

Я изучаю курс Udacity здесь: https://classroom.udacity.com/courses/ud388/lessons/4628431284/concepts/53174719510923

Я пытаюсь запустить их программу на Python с использованием Flask. Я запустил vagrant с помощью vagrant ssh

Затем я попытался запустить этот файл Python, набрав python api_server.py. Но когда я перехожу по адресу http://0.0.0.0:5000/ в своем браузере, я получаю:

Не найдено
Запрашиваемый URL не найден на сервере. Если вы ввели URL вручную, пожалуйста, проверьте свою запись и попробуйте еще раз. 

Затем я попробовал ввести curl 'http://127.0.0.1:5000' в vagrant, но получил ошибку

vagrant@vagrant-ubuntu-trusty-32:~$ curl 'http://127.0.0.1:5000'
curl: (7) Не удалось подключиться к 127.0.0.1 порт 5000: Соединение отклонено

Файл api_server.py приведен ниже:

#ЭТО ВЕБ-СЕРВЕР ДЛЯ ДЕМОНСТРАЦИИ ТИПОВ ОТВЕТОВ, КОТОРЫЕ МЫ ВИДИМ ОТ API ENDPOINT
from flask import Flask
app = Flask(__name__)

#GET ЗАПРОС

@app.route('/readHello')
def getRequestHello():
    return "Привет, я получил ваш GET-запрос!"

#POST ЗАПРОС
@app.route('/createHello', methods = ['POST'])
def postRequestHello():
    return "Я вижу, вы отправили POST сообщение :-)"
#UPDATE ЗАПРОС
@app.route('/updateHello', methods = ['PUT'])
def updateRequestHello():
    return "Отправлено Привет по PUT запросу!"

#DELETE ЗАПРОС
@app.route('/deleteHello', methods = ['DELETE'])
def deleteRequestHello():
    return "Удаляем ваш жесткий диск.....ха-ха, просто шучу! Я получил DELETE запрос!"

if __name__ == '__main__':
    app.debug = True
    app.run(host="0.0.0.0", port=5000)  

В случае если вы работаете с Docker и пытаетесь подключиться из другой консоли Docker, убедитесь, что используете “Docker exec” для привязки процесса к тестированию сервиса. Я пытался подключиться с помощью “docker run”, что создавало другой экземпляр docker, и curl давал мне “соединение отклонено” для 127.0.0.1:5000.

Ответ или решение

Ошибка curl: (7) Failed to connect to 127.0.0.1 port 5000: Connection refused указывает на то, что ваша Flask-приложение не запущено на локальном компьютере на порту 5000, к которому вы пытаетесь подключиться. Давайте разберёмся с этой проблемой шаг за шагом.

Шаги по устранению проблемы

  1. Запуск сервера Flask:
    Убедитесь, что ваше Flask-приложение действительно запущено. Запустите его в Vagrant с помощью команды:

    python api_server.py

    Убедитесь, что вы видите сообщение, которое говорит о том, что сервер запущен и слушает на порту 5000.

  2. Проверка URL:
    Проверьте, что вы используете правильный URL. В вашем коде у вас есть только один маршрут, доступный через /readHello. Попробуйте открыть:

    http://0.0.0.0:5000/readHello

    или

    http://127.0.0.1:5000/readHello
  3. Использование правильного IP-адреса:
    Обратите внимание, что, когда вы запускаете сервер Flask в Vagrant, 127.0.0.1 (или localhost) ссылается на сам контейнер, а не на вашу хост-машину. Таким образом, вам может потребоваться использовать 0.0.0.0 для доступа к приложению через браузер или другие инструменты, такие как curl.

  4. Проверка сети:
    Если вы все еще видите ошибку "Connection refused", убедитесь, что ваше приложение слушает на правильном порту и IP-адресе. Вы можете использовать следующие команды для проверки:

    netstat -tuln | grep 5000

    Эта команда покажет, слушает ли что-то на порту 5000. Если Flask запущен правильно, вы должны увидеть строку с указанным портом.

  5. Зависания или ошибки в сервере:
    Если сервер не запускается, это может быть связано с ошибками в коде. Убедитесь, что в api_server.py нет синтаксических ошибок и все маршруты правильно определены.

  6. Запуск через Docker (если применимо):
    Если вы работаете с Docker, убедитесь, что вы подключаетесь к правильному контейнеру. Используйте docker exec, чтобы зайти внутрь контейнера, в котором работает Flask-приложение, и используйте curl там. Пример команды:

    docker exec -it <имя_контейнера> curl http://127.0.0.1:5000/readHello

Заключение

Если вы выполните все перечисленные шаги и все равно столкнетесь с проблемами, попробуйте дополнительно проверить журналы Flask (логирование) для нахождения возможных ошибок, которые могут указывать на причину проблемы. Вы также можете перезапустить Vagrant и заново установить все зависимости, если считаете, что что-то пошло не так в процессе настройки.

Если у вас остались вопросы или возникли другие проблемы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...