docker: HEALTHCHECK через TCP probe ZMQ control port

netcat-openbsd добавлен в runtime layer (~50KB). HEALTHCHECK probe'ит
listening на 5599 (ZMQ control). Full functional ping через nc не сработает
(ZMTP требует binary greeting handshake), но liveness через TCP-проверку
достаточен для docker-compose restart-on-unhealthy логики.

Functional проверки делегированы external monitors:
  - MQTT health uptime_s растёт = composer не зависает
  - HA discovery sensor.composer_cfc-grid_active = camera-feed health
  - Phase 7 (Prometheus) добавит composition_time_us / fps metrics

Live-validated: cfc-grid container статус 'healthy' через 25с после
recreate, healthcheck Log shows exit 0.
This commit is contained in:
2026-06-03 08:36:03 +01:00
parent cd4f3114d6
commit 20b5234c41
+11
View File
@@ -51,10 +51,12 @@ FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 AS runtime
# Ubuntu 22.04 jammy: package names иные чем noble (libpng16-16 без t64).
# libcudart12 уже в runtime image; здесь только наши user-space deps.
# netcat-openbsd — для healthcheck'а через ZMQ ping (см. HEALTHCHECK ниже).
RUN apt-get update && apt-get install -y --no-install-recommends \
libpng16-16 libfreetype6 \
libzmq5 libjson-c5 libmosquitto1 \
fonts-dejavu-core \
netcat-openbsd \
&& rm -rf /var/lib/apt/lists/*
# Бинари + libcuframes (статически слинкована не вся, libcuframes shared нужен).
@@ -68,5 +70,14 @@ COPY --from=builder /src/build/src/libcuframes_composer.so.0.1.0 \
# NVIDIA_DRIVER_CAPABILITIES должен включать 'video' для NVENC через libnvidia-encode.
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
# Healthcheck — проверяет что ZMQ control plane port слушается.
# Полная functional проверка через ZMQ ping требует ZMTP handshake (plain nc
# не подходит — это binary wire protocol с greeting), поэтому здесь только
# liveness через TCP probe. Composer thread'ы (compose/encode) могут зависнуть
# без падения main process'а, но external monitor (MQTT health uptime_s,
# Prometheus в Phase 7) дополнит контроль over time.
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD nc -z 127.0.0.1 5599 || exit 1
ENTRYPOINT ["/usr/local/bin/grid_record"]
CMD ["--help"]