Команда в контейнере в Docker
Команда в контейнере
запускает интерпретатор
рядом с работающим сервером.
Вызов выполняется
внутри уже поднятого сервиса
и не заменяет его главный процесс.
Сервер на python
уже ждёт соединений.
Скрипт слушает 8000
на 0.0.0.0
и отдаёт hello:
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()
Образ собирается из
Dockerfile
на python:3.14:
FROM python:3.14
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
CMD ["python", "app.py"]
Сервис app
в фоне
с парой портов
8080
и 8000.
Файл compose.yaml:
services:
app:
build: .
ports:
- "8080:8000"
Подъём в фоне оставит главный процесс Python в работе. Выполним запуск проекта:
docker compose up -d --build
Короткий вызов
python
напечатает inner
в ту же копию,
где уже слушает сервер:
docker compose exec app python -c "print('inner')"
В работающем сервисе note запустите короткий вызов интерпретатора, который напечатает ping, не останавливая сервер.
Откройте localhost:8080 и убедитесь, что ответ страницы не пропал.