Docling на локальном стенде
Локальный стенд поднимает Docling тем же контейнером, что и рабочая инсталляция, но адрес сервиса зависит от того, где запущено приложение. Внутри общей сети контейнеров Docling доступен по имени сервиса, а приложению, запущенному на самой машине, нужен опубликованный порт — в поставке порт наружу не публикуется. Настройка занимает три шага: поднять контейнер, прописать две переменные среды и проверить разбор на реальном файле. Параметры сервиса, общие для любой инсталляции, разобраны в главе Docling: структурный импорт документов.
Что вам понадобится
- установленные и запущенные Docker и Docker Compose;
- локальная копия репозитория платформы и работающее приложение с базой данных и объектным хранилищем;
- файл
.envприложения, доступный на запись; - свободное место на диске под кэш моделей разбора;
- PDF с заголовками и таблицей для проверки.
Как поднять контейнер Docling
Сервис docling объявлен в docker-compose.yml платформы, поэтому поднимается той же командой, что и остальные контейнеры стенда. Отдельного compose-файла для Docling нет.
Запустите сервис из корня репозитория:
docker compose up -d docling
Первый запуск занимает несколько минут: Docling скачивает модели разбора и кладёт их в именованный том docling_models. Повторные запуски проходят быстро — модели остаются в томе.
Убедитесь, что контейнер поднялся и прошёл проверку готовности:
docker compose ps docling
В колонке STATUS должно появиться healthy. Значение starting в колонке STATUS означает, что контейнер ещё не прошёл проверку готовности: первую проверку Docker делает через 120 секунд после старта, и этот запас покрывает загрузку моделей.
Как связать приложение с Docling
Приложение обращается к Docling по адресу из переменной DOCLING_API_URL и делает это, только когда DOCLING_ENABLED равна строке true. Адрес зависит от того, где работает само приложение: в контейнере или на машине разработчика.
| Где запущено приложение | Значение DOCLING_API_URL | Что нужно дополнительно |
|---|---|---|
| В контейнере вместе с остальным стендом | http://docling:5001 | Ничего: сервисы видят друг друга по именам внутри общей сети |
На машине разработчика командой npm run dev | http://localhost:5001 | Опубликованный порт контейнера |
В поставке порт Docling наружу не публикуется. Если приложение работает на машине разработчика, поднимите сервис отдельной командой с публикацией порта вместо docker compose up -d docling:
docker run -d --name docling -p 5001:5001 -v docling_models:/opt/app-root/src/.cache/docling/models -e DOCLING_SERVE_HOST=0.0.0.0 ghcr.io/docling-project/docling-serve:v1.13.1
Пропишите в .env приложения обе переменные:
DOCLING_ENABLED=true
DOCLING_API_URL=http://localhost:5001
Перезапустите приложение: переменные среды читаются при старте процесса.
Важно. Значение
DOCLING_ENABLEDсравнивается со строкойtrueбуквально —True,1иyesоставят Docling выключенным.
Как проверить разбор
Проверка идёт в два шага: сначала отвечает ли сервис, потом сохраняет ли платформа структуру документа. Первый шаг отделяет проблемы сети от проблем настройки.
Запросите состояние сервиса с той же машины, где работает приложение:
curl http://localhost:5001/health
Сервис отвечает кодом 200. Отказ соединения означает, что порт не опубликован или контейнер не запущен.
Затем проверьте разбор на реальном файле:
- Откройте в платформе любую базу знаний.
- Загрузите подготовленный PDF.
- Дождитесь завершения импорта.
- Откройте импортированный документ.
Разбор через Docling виден по итоговому документу: заголовки и таблицы остаются структурой, а не текстом.
Заголовки остались заголовками, таблица — таблицей, изображения стоят на своих местах: разбор прошёл через Docling. Сплошной текст и изображения в конце документа означают, что сработал упрощённый разбор.
Как остановить и обновить сервис
Контейнер Docling живёт независимо от остального стенда, поэтому его можно останавливать и обновлять отдельно. Том с моделями при этом сохраняется, и повторная загрузка не потребуется. Если Docling поднят командой docker run, останавливайте контейнер командой docker stop docling, а обновляйте удалением через docker rm docling и повторным запуском.
Остановите сервис:
docker compose stop docling
Скачайте свежий образ:
docker compose pull docling
Пересоздайте контейнер на скачанном образе:
docker compose up -d --force-recreate docling
Пересоздание нужно и после правки окружения контейнера: переменные среды применяются при создании контейнера, а не при перезапуске.
Частые вопросы
Порт 5001 занят другим процессом
Опубликуйте контейнер на свободном порту машины, оставив внутренний порт прежним, и укажите выбранный порт машины в DOCLING_API_URL. Внутри контейнера Docling всегда слушает 5001, меняется только внешняя часть сопоставления портов.
Импорт идёт без структуры, хотя контейнер запущен
Приложение не видит сервис или не обращается к нему. Проверьте по порядку:
DOCLING_ENABLED=trueв.env, приложение перезапущено после правки;DOCLING_API_URLсоответствует способу запуска приложения из таблицы выше;curlк/healthотвечает кодом 200 с той же машины, где работает приложение;- загружаемый PDF содержит текстовый слой, а не скан.
Первый запуск идёт очень долго
Загружаются модели разбора. Дождитесь состояния healthy в выводе docker compose ps docling и следите за ходом загрузки в логах: docker logs docling --tail 100.
Что дальше
- Docling: структурный импорт документов — параметры сервиса, таймаут разбора и разбор отказов.
- Администрирование знаний — лимиты загрузки файлов и настройки индексации.
- Базы знаний — как выглядит импорт со стороны читателя.