Адреса, EXPOSE и публикация портов
Проследите путь запроса от localhost на ноутбуке до HTTP-сервера внутри контейнера.
После урока вы сможете
- Различать порт хоста и контейнера
- Объяснять EXPOSE и -p
- Диагностировать неправильный bind и публикацию
У каждого окружения свой localhost
Когда вы открываете localhost в браузере на ноутбуке, вы обращаетесь к ноутбуку. Когда Python слушает 127.0.0.1 внутри контейнера, это loopback самого контейнера. Одинаковое имя не делает два сетевых окружения одним.
# Внутри app.py
HTTPServer(("0.0.0.0", 8000), Handler).serve_forever()
0.0.0.0 в вызове сервера означает принимать подключения на всех IPv4-интерфейсах его окружения. Это адрес привязки сокета, а не адрес, который требуется отправить пользователю для открытия сайта. Конкретный адрес клиента зависит от того, как опубликован порт.
Типичный симптом неверной привязки: процесс работает, ошибок Python нет, но запрос снаружи не проходит. Менять JSON в таком случае бессмысленно — обработчик ещё не получил запрос. Начните с адреса прослушивания и фактического порта приложения.