Вопрос или проблема
Невозможно получить доступ к приложению Flask в Vagrant VM из браузера хоста.
Я запускаю приложение Flask внутри виртуальной машины Vagrant. Приложение настроено на прослушивание всех адресов (0.0.0.0), и я могу получить к нему доступ из VM, используя curl http://localhost:5000. Однако я не могу достать его из веб-браузера моего хост-ноутбука. Я получаю ошибку “Этот сайт недоступен”.
Ниже приведен код, который я использовал
from flask import Flask
app = Flask(__name__)
@app.route("https://stackoverflow.com/")
def home():
return "Поздравляю! Flask работает успешно."
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
И когда я запускаю его, я получаю
vagrant@ubuntu-focal:~/smart-home-project$ python3 app.py
- Запуск приложения Flask ‘app’
- Режим отладки: отключен
ПРЕДУПРЕЖДЕНИЕ: Это сервер разработки. Не используйте его в производственной среде. Используйте сервер WSGI для производства. - Запуск на всех адресах (0.0.0.0)
- Запуск на http://localhost:5000
- Запуск на http://Vm-ip:5000
Нажмите CTRL+C для выхода
Я получаю ошибку, когда вставляю http://Vm-ip:5000 в браузере
Я подтвердил, что приложение Flask работает правильно и доступно из VM.
Я пытался изменить порт на 8000
Я пытался отключить брандмауэр как на VM, так и на ноутбуке
Я надеялся, что с этим смогу загрузить его в своем браузере, но ошибка по-прежнему сохраняется
Ответ или решение
Чтобы решить проблему с доступом к приложению Flask, работающему внутри виртуальной машины Vagrant, из веб-браузера хостовой машины, вам необходимо убедиться в правильной конфигурации сетевого окружения Vagrant и сетевых настроек вашей Flask-программы. Вот несколько шагов, которые могут помочь вам решить эту проблему:
-
Проверьте настройки Vagrantfile:
Убедитесь, что в вашемVagrantfile
правильно настроены порты для перенаправления. Вам нужно добавить перенаправление порта, чтобы запросы, поступающие на хостовой машине, перенаправлялись на порт, на котором работает Flask-приложение во виртуальной машине (например, 5000). Пример настройки Vagrantfile:Vagrant.configure("2") do |config| config.vm.box = "ubuntu/focal64" config.vm.network "forwarded_port", guest: 5000, host: 5000 end
-
Перезапустите Vagrant:
После внесения изменений вVagrantfile
необходимо выполнить команду для перезапуска Vagrant:vagrant reload
-
Проверьте IP-адрес:
Убедитесь, что вы используете правильный IP-адрес для доступа к приложению. Если вы используете перенаправление портов, вам следует обращаться кhttp://localhost:5000
на хостовой машине, а не по IP-адресу виртуальной машины. -
Код Flask:
Ваш код Flask выглядит в целом нормально, но вы указали неверный маршрут для функцииhome()
. Вместо@app.route("https://stackoverflow.com/")
необходимо использовать@app.route("/")
или другой корректный путь. Вот исправленный вариант:from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Поздравляем! Flask работает успешно." if __name__ == '__main__': app.run(host="0.0.0.0", port=5000)
-
Отключите брандмауэр (если необходимо):
Хотя вы уже пробовали отключить брандмауэр, убедитесь, что он действительно отключен, или добавьте необходимые правила для разрешения входящих соединений на порту 5000 на виртуальной машине и вашем хосте. -
Проверьте доступность порта:
Убедитесь, что порт 5000 действительно открыт и доступен. Вы можете использовать такие команды, какnetstat
илиss
, для проверки открытых портов.sudo netstat -tuln | grep :5000
-
Используйте инструменты диагностики:
Если после выполнения всех вышеперечисленных шагов проблема сохраняется, используйте команды вродеcurl
с хостового компьютера, чтобы протестировать соединение:curl http://localhost:5000
Следуя этим шагам, вы должны быть в состоянии получить доступ к вашему Flask-приложению из браузера на хостовой машине. Если проблемы всё ещё продолжаются, пожалуйста, предоставьте дополнительную информацию о конфигурации вашей сети, чтобы мы могли помочь вам более детально.