Невозможно подключиться к приложению Flask на Docker с хоста

Я установил образ docker ubuntu 14.04 и запускаю его с помощью следующей команды:

docker run -d -p 5000:5000 ari/python3-flask

Докерфайл:

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y python3 python3-pip
ADD . /var/my_app
RUN pip3 install -r /var/my_app/requirements.txt
EXPOSE 5000
CMD ["python3", "/var/my_app/runserver.py"]

Однако, если я попытаюсь свернуть адрес (localhost:5000) или открыть его в браузере, я получу ошибку соединения.

Журнал Docker для контейнера показывает:

Running on http://127.0.0.1:5000/

Restarting with reloader

Кто-нибудь что-то не так или может быть не так с моей настройкой и / или конфигурацией докера? Спасибо.


person Ari    schedule 17.10.2014    source источник
comment
опубликуйте свой Dockerfile, вы используете настоящий докер или boot2docker (win или macos) в вашем случае?   -  person Dragu    schedule 17.10.2014
comment
что показывает docker logs <id container>?   -  person Thomasleveil    schedule 17.10.2014
comment
@Dragu: я использую настоящий докер.   -  person Ari    schedule 17.10.2014
comment
Кстати, если вы хотите развернуть свое приложение в Docker без необходимости изучать, устанавливать и настраивать uWSGI, Nginx и Supervisord (чтобы получить максимальную производительность и надежность), вы можете проверить этот образ: hub.docker.com/r/tiangolo/uwsgi-nginx-flask   -  person tiangolo    schedule 20.02.2016


Ответы (1)


Веб-сервер, работающий в вашем контейнере, прослушивает соединения через порт 5000 сетевого интерфейса обратной связи (127.0.0.1). Таким образом, этот веб-сервер будет отвечать только на http-запросы, исходящие из самого этого контейнера.

Чтобы веб-сервер мог принимать соединения, исходящие извне контейнера, вам необходимо привязать его к IP-адресу 0.0.0.0.

Поскольку вы используете Flask, этого можно легко добиться в файле runserver.py, используя:

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Затем, когда вы запустите свой контейнер и посмотрите журнал, вы должны увидеть что-то вроде:

 * Running on http://0.0.0.0:5000/
person Thomasleveil    schedule 17.10.2014
comment
Хорошее наблюдение. Спасибо - person Atish Narlawar; 05.11.2014
comment
Даже после добавления `host='0.0.0.0' я все еще получаю сообщение об ошибке соединения. Мой файл докера настроен так же, как @Ari. - person Alex F; 06.11.2019
comment
это решено? - person v09; 30.07.2020