FROM python:3.12-slim AS base # uv binary (тот же приём, что и backend/Dockerfile). COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/ WORKDIR /app ENV UV_COMPILE_BYTECODE=1 \ UV_LINK_MODE=copy \ PYTHONUNBUFFERED=1 COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev --no-install-project COPY exporter.py ./ # Непривилегированный пользователь — сокет Docker сервис не видит вообще # (доступ только к socket-proxy по сети compose), но принцип наименьших # привилегий соблюдаем и здесь. RUN useradd --no-create-home --shell /usr/sbin/nologin exporter USER exporter EXPOSE 9419 HEALTHCHECK --interval=10s --timeout=5s --retries=10 --start-period=15s \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:9419/health')" || exit 1 # Не `uv run` — тому нужен писабельный кэш в $HOME, а у непривилегированного # пользователя без домашней директории (--no-create-home выше) его нет; # зависимости уже установлены в .venv на шаге сборки, `uv run` в рантайме # не добавляет ничего, кроме этой проблемы. CMD [".venv/bin/python", "exporter.py"]