Files
cam_control/README_DOCKER.md
2025-12-03 19:57:11 +09:00

46 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Сборка и запуск в Docker
Краткие инструкции по сборке и запуску контейнера локально.
Собрать образ:
```bash
docker build -t camera_server:latest .
```
Запустить контейнер:
```bash
docker run --rm -p 8000:8000 \
-v "$(pwd)/static:/app/static" \
-v "$(pwd)/templates:/app/templates" \
--name camera_server camera_server:latest
```
Или с помощью docker-compose:
```bash
docker-compose up --build
```
Примечания:
- Если у вас headless-сервер и вы не используете GUI-возможности OpenCV, рассмотрите замену `opencv-python` на `opencv-python-headless` в `req.txt`.
- При проблемах со сборкой на некоторых платформах установите необходимые системные пакеты (в Dockerfile уже перечислены распространённые зависимости).
Разделение адресов для биндинга и отображения (важно)
- BIND_HOST — адрес, на котором uvicorn внутри контейнера будет слушать соединения. По умолчанию это 0.0.0.0 (в контейнере). Не ставьте сюда внешний IP хоста, если вы запускаете в контейнере.
- PUBLIC_HOST (или ADVERTISED_HOST) — адрес, который будет показан в UI (dashboards, ws-URL). Укажите сюда реальный IP хоста (например, 192.168.0.112) или публичный адрес.
Пример `.env` для корректной работы в Docker:
```
# BIND_HOST указывает, на каком интерфейсе внутри контейнера слушать (оставьте 0.0.0.0)
BIND_HOST=0.0.0.0
# PORT — хостовый порт (docker-compose подставит его в маппинг)
PORT=8000
# PUBLIC_HOST — адрес, который будет отображаться в UI (реальный адрес машины)
PUBLIC_HOST=192.168.0.112
```
Если в `.env` у вас был `HOST=192.168.0.112`, то Docker раньше пробрасывал эту переменную в контейнер и uvicorn пытался биндиться на этот адрес — внутри контейнера такого адреса может не быть, и bind завершался ошибкой `cannot assign requested address`. Поэтому важно разделять `BIND_HOST` (bind) и `PUBLIC_HOST` (advertised).