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

2.6 KiB
Raw Permalink Blame History

Сборка и запуск в Docker

Краткие инструкции по сборке и запуску контейнера локально.

Собрать образ:

docker build -t camera_server:latest .

Запустить контейнер:

docker run --rm -p 8000:8000 \
  -v "$(pwd)/static:/app/static" \
  -v "$(pwd)/templates:/app/templates" \
  --name camera_server camera_server:latest

Или с помощью docker-compose:

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).