Нишпорка в Docker¶
Готовий образ для тих, хто не хоче ставити Нишпорку на основну систему. У ньому є застосунок, рушії читання (kraken і PARSeq) і ваги трьох моделей. Нічого доставляти не треба.
Windows з карткою NVIDIA — простіше без Docker
Інсталятор nyshporka-setup.exe
сам питає драйвер, яка карта стоїть, і ставить рушії під неї — без WSL,
без Docker Desktop і без образу на 12 ГБ.
Який образ брати¶
| машина | образ | швидкість аркуша |
|---|---|---|
| NVIDIA RTX 20xx–40xx, GTX 9xx/10xx/16xx, V100, T4, A-серія | ghcr.io/sergiush-ua/nyshporka:cuda |
~10–20 с |
| NVIDIA RTX 50xx, H100 | ghcr.io/sergiush-ua/nyshporka:cuda128 |
~10–20 с |
| без NVIDIA, зокрема Mac на M-чипі | ghcr.io/sergiush-ua/nyshporka:latest |
~20 с – 1 хв, залежно від ядер і щільності сторінки |
Mac на Apple Silicon читає лише процесором
Docker на Mac не має доступу до відеочипа Apple, тож образ працює на процесорі. Нативна установка на Mac теж читає процесором: рушії поки не вміють Metal. Отже Docker тут нічого не відбирає, але й не прискорює.
Для образів cuda потрібен драйвер NVIDIA на машині. На Linux — ще
NVIDIA Container Toolkit.
На Windows — Docker Desktop із WSL 2, версії 4.31 або новіший: драйвер
NVIDIA від 555 у старішому Docker Desktop не стартує (Error 500: named symbol not
found).
Перше завантаження :cuda довге
Образ важить близько 12 ГБ (сам torch із CUDA — близько 4 ГБ одним
шаром). Після Download complete Docker ще розпаковує, і рядок
Extracting може кілька хвилин стояти без руху. Дочекайтесь
Status: Downloaded newer image — далі запуск займає секунди.
Що не так з картою, каже doctor: рядок «Прискорення (GPU)» називає, чого
бракує — тегу :cuda, прапорця --gpus all чи новішого Docker Desktop.
Запуск¶
Змонтуйте свою теку в /srv/nysh, інакше прочитане зникне разом із
контейнером. Без монтування образ про це попередить, а теку, змонтовану в
/srv/nyshporka (так було в першій версії цієї сторінки), відмовиться
запускати. При першому запуску в ній з'являться дві підтеки:
work— робочий простір: скани, прочитаний текст, реєстри;home— налаштування Нишпорки: ключ доступу до застосунку, каталог справ, позначки оновлень.
# перевірити, що все на місці
docker run --rm -v "$PWD/nysh:/srv/nysh" ghcr.io/sergiush-ua/nyshporka doctor
# прочитати справу: скани кладете в nysh/work/scans/<справа>
docker run --rm -v "$PWD/nysh:/srv/nysh" ghcr.io/sergiush-ua/nyshporka \
read /srv/nysh/work/scans/<справа>
# те саме на карті NVIDIA
docker run --rm --gpus all -v "$PWD/nysh:/srv/nysh" \
ghcr.io/sergiush-ua/nyshporka:cuda read /srv/nysh/work/scans/<справа>
Windows: поточна тека пишеться інакше
$PWD — це Linux, macOS і PowerShell. У cmd.exe змінна не підставляється,
і Docker отримує буквально $PWD/nysh. Там пишіть %cd%:
docker run --rm -v "%cd%\nysh:/srv/nysh" ghcr.io/sergiush-ua/nyshporka doctor
У PowerShell — ${PWD}: -v "${PWD}\nysh:/srv/nysh". Або просто повний
шлях: -v "C:\nysh:/srv/nysh".
Без сканів можна спробувати на вкладеній зразковій справі (три аркуші):
docker run --rm -v "$PWD/nysh:/srv/nysh" ghcr.io/sergiush-ua/nyshporka sample
docker run --rm -v "$PWD/nysh:/srv/nysh" ghcr.io/sergiush-ua/nyshporka \
read /srv/nysh/work/data/raw/sample-315-159 --rerun --out /srv/nysh/work/sample-out
Текст лягає поруч у *.txt. Наприкінці читання є рядок
⏱ темп: … с/стор · … рядк/стор · голосів … · шардів … · <пристрій> —
це темп вашої машини, і саме його можна порівнювати з чужими замірами.
Застосунок у браузері¶
docker run --rm -it -p 127.0.0.1:8788:8788 -v "$PWD/nysh:/srv/nysh" \
ghcr.io/sergiush-ua/nyshporka \
serve --host 0.0.0.0 --confirm-host 0.0.0.0 --confirm-public --no-browser
Термінал надрукує посилання з кодом сполучення:
http://127.0.0.1:8788/#pair=…. Відкрийте його в браузері. Якщо в -p перед
:8788 стоїть інший порт (-p 127.0.0.1:9000:8788), підставте його в
посилання. Адреса 172.17.0.x — внутрішня адреса контейнера, з Windows і macOS
вона не відкривається.
Код сполучення діє 10 хв і один раз, а видно його лише з -it. Без нього
відкрийте http://127.0.0.1:8788/ і введіть ключ доступу: він лежить у вашій
теці, nysh/home/config/nyshporka/serve/*.key, і між запусками не міняється.
--host 0.0.0.0 тут потрібен лише для того, щоб Docker міг передати порт у
контейнер. Назовні машини застосунок не видно, бо порт прив'язано до
127.0.0.1. Не прибирайте 127.0.0.1: з -p, якщо не розумієте наслідків:
через застосунок можна писати файли й запускати платну оренду.
Помічник поруч із контейнером¶
Для тих, хто тримає Нишпорку в Docker, а помічника (Claude Desktop, Claude
Code, Codex) — на основній системі. Сам помічник контейнера не бачить: команди
nysh, якими скіли шукають прізвище й показують вирізку рядка, живуть
усередині. Без них він читає текстові файли сам і «впізнає» шукане прізвище
там, де рушій прочитав інше слово. Посилання на скан при цьому справжнє, а
прочитання ні. Місток — обгортка nysh на основній системі: вона передає
команди в контейнер і перекладає шляхи в обидва боки.
Пошук падає з contentless_delete — оновіть образ
unrecognized option: "contentless_delete" — так падає пошук по
прочитаному (nysh text find, crop, sheet) в образі зі старою SQLite. Оновіть образ: docker pull
ghcr.io/sergiush-ua/nyshporka:cuda (або ваш тег), потім docker rm -f
nysh і знову команда з кроку 1.
Крок 1. Контейнер, що працює постійно¶
docker run -d --name nysh --restart unless-stopped --gpus all \
-p 127.0.0.1:8788:8788 -v "$PWD/nysh:/srv/nysh" \
ghcr.io/sergiush-ua/nyshporka:cuda \
serve --host 0.0.0.0 --confirm-host 0.0.0.0 --confirm-public --no-browser
Без карти NVIDIA приберіть --gpus all і візьміть тег latest. Тека
вказується так само, як у розділі «Запуск» (у PowerShell — ${PWD}, у cmd.exe —
%cd%, або повний шлях). Цей контейнер заодно тримає застосунок у браузері:
http://127.0.0.1:8788/. Код сполучення у фоновому режимі не друкується, тож
вводьте ключ доступу з nysh/home/config/nyshporka/serve/*.key.
Після перезавантаження Docker піднімає контейнер сам; зупинений вручну —
docker start nysh. Оновити образ: docker pull …, потім docker rm -f nysh і
та сама команда docker run. Прочитане лежить у вашій теці й лишається.
Крок 2. Готовий запит помічникові¶
Відкрийте в помічнику теку nysh/work, а не nysh цілком: у home лежить
ключ доступу до застосунку. Вставте запит, підставивши повний шлях до теки:
Нишпорка в мене працює в Docker-контейнері nysh, тека <повний шлях до nysh>
змонтована в ньому як /srv/nysh. Прочитай
https://raw.githubusercontent.com/SERGIUSH-UA/nyshporka/main/AGENTS.md,
розділ «Якщо Нишпорка живе в Docker», і зроби за ним усе, щоб команда nysh
працювала тут. Кожен крок пояснюй мені простими словами.
Коли все готово — спитай, яке прізвище я шукаю і в яких написаннях.
Помічник, щоразу питаючи дозволу:
- покладе обгортку
docker/nysh-host.shпід іменемnyshу теку команд і впише в неї ім'я контейнера й теку; - перевірить місток (
nysh doctor); - поставить скіли з контейнера, тієї самої версії, що й Нишпорка, у
nysh/work/.claude/skills(Claude Code) іnysh/work/.agents/skills(Codex); - запише в
nysh/workзаписку собі на наступні сесії.
Готово, коли nysh doctor відповідає з основної системи, а кожного
кандидата помічник показує вирізкою рядка зі скану.
Обмеження
- Обгортка — скрипт bash. Claude Desktop і Claude Code на Windows виконують команди в Git Bash (крок 1 установки), на macOS і Linux bash є в системі. Codex на Windows кличе PowerShell, і під нього обгортки поки немає.
- Рядок
nysh doctor«Скіли агента» дивиться всередину контейнера і тут завжди каже «не встановлені». Скіли лежать уnysh/work/.claude/skillsіnysh/work/.agents/skills. - Моделі, докачані в контейнер (
nysh models get …), живуть, доки живе контейнер. Післяdocker rmїх треба докачати знову.
Чого в контейнері немає¶
- Сховища паролів системи. Вхід у Супрягу й ключі, які застосунок зберігає
в keyring, у контейнері не запам'ятовуються. Ключі сховища й оренди
передаються змінними середовища (
-e NYSHPORKA_S3_KEY=…,-e NYSHPORKA_RENT_KEY=…). - Плагіна оренди. Хмарне читання (
nysh cloud go) ставиться окремо, і в образ його не вкладено. - Скілів помічника. Агент на основній системі контейнер не бачить. Міст до нього — розділ «Помічник поруч із контейнером»; інакше — звичайна установка.