Порт приложения в Docker
Порт приложения публикует 8000 контейнера на 8080 компьютера, и страница открывается в браузере.
Слева в паре - порт на хосте,
справа - порт внутри копии,
где слушает Python.
Строка EXPOSE в Dockerfile
лишь помечает порт образа
и сама по себе не открывает
его на компьютере.
Скрипт должен слушать
0.0.0.0, иначе запрос
снаружи контейнера не дойдёт
до процесса.
Файл app.py с учётом
этого такой:
from http.server import BaseHTTPRequestHandler, HTTPServer
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'hello')
if __name__ == '__main__':
HTTPServer(('0.0.0.0', 8000), Handler).serve_forever()
К паре портов добавим фоновый
режим, чтобы терминал
освободился.
На хосте откроем порт
8080, внутри копии
останется 8000.
Команда запуска такая:
docker run --rm -d -p 8080:8000 -i python:3.14 python - <<'PY'
from http.server import BaseHTTPRequestHandler, HTTPServer
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'hello')
if __name__ == '__main__':
HTTPServer(('0.0.0.0', 8000), Handler).serve_forever()
PY
После подъёма адрес
localhost:8080 покажет
в браузере слово hello
без разметки.
Страница открывается
именно по опубликованному
порту на компьютере.
Опишите сервис note с ответом ready и парой портов 8081 на хосте и 8000 в контейнере на python:3.14.
Откройте localhost:8081 и зафиксируйте текст на странице.