FFmpeg в Docker для Python-бота на Bothost
Библиотека из PyPI и бинарникffmpeg в системе — это разные вещи. Ниже — как это работает в контейнерах, какие ошибки чаще всего встречаются и что именно делает хостинг Bothost при сборке образа (логика agentv3 на ноде сборки).
Почему одного pip install недостаточно
Пакет ffmpeg-python — это обёртка над командной строкой: он строит аргументы и запускает исполняемый файл ffmpeg (и при необходимости ffprobe). Сам бинарник в контейнер pip не кладёт.
В образ нужно установить ffmpeg через пакетный менеджер ОС (в Debian/Ubuntu — apt), а уже потом ставить Python-зависимости из pip.
На Bothost ваш бот собирается в Docker-образ и запускается в контейнере. Базовый слой для Python-проектов — образы семейства python:{версия}-slim (Debian). В «голом» slim ffmpeg нет, пока его явно не добавить.
Как Bothost собирает образ (кратко)
При создании или обновлении бота нода agentv3:- Клонирует репозиторий (или разворачивает архив).
- Генерирует Dockerfile функцией
generate_dockerfileвmain.py— с учётом шаблона,requirements.txt/pyproject.toml, версии Python и т.д. - Сохраняет Dockerfile в каталог сборки и выполняет
docker build.
Что мы добавили на стороне Bothost
В генератор Python-Dockerfile добавлена проверка зависимостей (текстrequirements.txt и при использовании uv — соответствующий фрагмент pyproject.toml). Если в зависимостях встречаются, например:
ffmpeg-pythonpydubaeneasmoviepy
ffmpeg через apt-get (в поставке Debian он же подтягивает ffprobe, что важно для типичных ошибок из практики).
После деплоя пересоберите бота (push в Git или повторное развёртывание), чтобы слой с apt попал в образ.
Пример Dockerfile при дефолтной сборке Bothost
Платформа сама генерирует Dockerfile (и передdocker build записывает его в каталог проекта). В репозитории вы по-прежнему храните только код и requirements.txt; руками Dockerfile писать не обязательно.
Ниже — упрощённый пример того, что получится для типичного Python-бота с ffmpeg-python в зависимостях (версия Python, имя точки входа и блок установки пакетов в реальности могут отличаться — в логе сборки всегда виден полный сгенерированный файл):
FROM python:3.11-slim
WORKDIR /app
# Системные пакеты: ffmpeg (появляется, если в deps есть ffmpeg-python, pydub, aeneas, moviepy)
RUN apt-get update && apt-get install -y \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
# … установка зависимостей из requirements.txt (на Bothost это может быть построчный pip и доп. шаги для aiogram и т.д.)
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "bot.py"]bot.py) и версия образа (3.11, 3.12 …) подставляются из настроек бота и содержимого репозитория.
Типичная ошибка: «не найден ffprobe»
На Stack Overflow часто приводят ситуацию:ffmpeg как будто установили, а Python-библиотека ругается на ffprobe (No such file or directory). На Debian/Ubuntu метапакет ffmpeg обычно ставит и ffmpeg, и ffprobe в стандартные пути (/usr/bin/...). Если ставить только «урезанные» или кастомные сборки — проверяйте, что оба бинарника на PATH.
Путаница с именами пакетов в Python
Если видите что-то вродеAttributeError: module 'ffmpeg' has no attribute 'input' — часто установлен не тот пакет. Для API в стиле ffmpeg.input(...) нужен пакет ffmpeg-python, а не другие одноимённые пакеты с PyPI.
Два подхода к Docker «вообще» (и зачем боту свой образ)
В гайде на DEV разбирают, в частности:- готовый образ вроде jrottenberg/ffmpeg — удобно для разовой конвертации файлов с примонтированной папкой;
- свой Dockerfile на базе Ubuntu/Debian с
apt-get install -y ffmpeg— когда нужен полноценный рантайм (например, Python + зависимости + ваш код).
Минимальный чек-лист
- В
requirements.txt(или в зависимостяхpyproject.toml) указать ffmpeg-python (или другую библиотеку из списка выше — тогда подтянется apt-пакетffmpeg). - Убедиться, что в коде вызывается установленный CLI (при странных PATH некоторые библиотеки позволяют явно задать путь к бинарникам — смотрите документацию вашей обёртки).
- Задеплоить бота заново и при необходимости посмотреть лог сборки в панели Bothost: там виден итоговый Dockerfile и вывод
docker build.
Полезные ссылки
Статья подготовлена для блога Bothost с учётом текущей логики сборки agentv3.
133 просмотров
0 лайков
0 комментариев
Комментарии (0)
Пока нет комментариев. Будьте первым!