Эта страница описывает, как собирать и запускать отдельные Docker-образы для компонентов: nlp
, bim
, mcp-client
.
Примечание: MCP (FreeCAD) не запускается в контейнере — MCP-client (контейнер) отправляет
stubs.json
на MCP, работающий локально в FreeCAD.
1. Подготовка¶
- Установи Docker Desktop (Windows/macOS) или Docker Engine (Linux).
- Убедись, что Docker работает:
docker version
иdocker info
. - В Windows лучше иметь WSL2 включённым (рекомендуется).
2. Сборка образов (в корне репо)¶
(powershell)
Перейди в корень проекта
cd C:\draftai
- NLP
docker build -f Dockerfile.nlp -t draftai/nlp:local .
- BIM
docker build -f Dockerfile.bim -t draftai/bim:local .
- MCP-client (отправитель)
docker build -f Dockerfile.mcp-client -t draftai/mcp-client:local .
Если Docker Desktop даёт ошибку при build — убедись, что в команде указан контекст . в конце (последний аргумент), и Docker Desktop запущен.
Посмотреть список контейнеров (чтобы найти нужный) docker ps -a
3. Запуск Docker NLP¶
app/nlp_core
— это путь внутри контейнера, а не папка на вашем Windows-диске. Docker создаёт изолированную файловую систему для контейнера: если вы не смонтировали хост-папку в контейнер через -v
, файлы остаются в контейнере и не видны на хосте.
Как получить результаты из контейнера
Контейнеры по-умолчанию работают в изолированной файловой системе — чтобы увидеть результаты на хосте, монтируй volume.
Пример: запуск NLP и сохранение результата в папку на хосте
Создаём хостовую папку
New-Item -ItemType Directory -Path C:\draftai\nlp_core\OUT -Force
Запускаем контейнер и монтируем OUT → /workspace/output
docker run --rm \
-v "C:\draftai\nlp_core\input:/app/nlp_core/input:ro" \
-v "C:\draftai\nlp_core\OUT:/workspace/output" \
draftai/nlp:local \
python /app/nlp_core/nlp_core/run_cli.py --out /workspace/output/result.json -v
После завершения файл C:\draftai\nlp_core\OUT\result.json
будет содержать результат.
либо:
Запуск Docker NLP (создаём result.json
на хосте)
Это важный шаг: NLP должен записать result.json
в хостовую папку C:\draftai\nlp_core\OUT.
Выполни:
$repo = "C:\draftai"
docker run --rm `
-v "${repo}\nlp_core\OUT:/workspace/output" `
draftai/nlp:local `
sh -c "python -m pip install --upgrade pip || true; python -m spacy download ru_core_news_sm || true; python /app/nlp_core/nlp_core/run_cli.py --out /workspace/output/result.json -v"
Пояснения:
-v "${repo}\nlp_core\OUT:/workspace/output"
— результат будет доступен в C:\draftai\nlp_core\OUT.
Команда внутри контейнера: обновление pip (без ошибок), попытка скачать spaCy-модель (если не включена в образ), затем запуск run_cli.py.
Проверка успешности:
Test-Path "C:\draftai\nlp_core\OUT\result.json"
Get-Content "C:\draftai\nlp_core\OUT\result.json"
Если не появилась строка про созданный файл — смотри логи контейнера (см. раздел «Отладка» ниже).
4. Запуск Docker BIM (вход — результат NLP, выход — папка runs на хосте)¶
После успешного шага 3 запускаем BIM. Важно — монтируем nlp_core/OUT
так, чтобы BIM видел файл под тем путём, который он ожидает.
docker run --rm `
-v "${repo}\nlp_core\OUT:/workspace/input:ro" `
-v "${repo}\bim_core\runs:/workspace/output" `
-v "${repo}\bim_core\runs:/app/bim_core/runs" `
draftai/bim:local `
python /app/bim_core/bim_core/run_cli.py --tz /workspace/input/result.json --out /workspace/output -v
5. Запуск Docker MCP-client (отправка в локальный MCP)¶
MCP-сервер у тебя запускается локально в FreeCAD (он слушает порт 9090 на хосте).
exec(open(r"C:\draftai\mcp_server\mcp_serverV3.py", encoding="utf-8").read())
Отправка примитивов (stubs)
docker run --rm `
-v "${repo}\bim_core\runs:/workspace/runs:ro" `
draftai/mcp-client:local `
python /app/send_stubs_cli.py --stubs /workspace/runs/stubs.json --host host.docker.internal --port 9090 -v
если ENTRYPOINT = python /app/send_stubs_cli.py
или CMD
уже это делает)
Не передаём python /app/send_stubs_cli.py
в командной строке — передаём только аргументы скрипта:
$repo="C:\draftai"
docker run --rm `
-v "${repo}\bim_core\runs:/workspace/runs:ro" `
draftai/mcp-client:local `
--stubs /workspace/runs/stubs.json --host host.docker.internal --port 9090 -v
или если образ использует CMD:
docker run --rm -v "${repo}\bim_core\runs:/app/bim_core/runs:ro" draftai/mcp-client:local
Полная команда вручную (переопределить ENTRYPOINT)
Можно временно обнулить ENTRYPOINT и передать команду целиком:
docker run --rm --entrypoint "" `
-v "${repo}\bim_core\runs:/workspace/runs:ro" `
draftai/mcp-client:local `
python /app/send_stubs_cli.py --stubs /workspace/runs/stubs.json --host host.docker.internal --port 9090
6. Советы и типичные ошибки¶
Где искать файлы? — Если не монтируешь host-volume
, файлы останутся в контейнере и будут потеряны после --rm
. Всегда монтируй output
в папку хоста.
Права доступа: при записи в смонтированную папку контейнер под пользователем appuser
может не иметь прав. Решение: монтировать папку и выставлять подходящие права, или запускать контейнер от root
(не рекомендуется для финального образа).
FreeCAD: запуск MCP сервера внутри контейнера нежелателен — FreeCAD GUI нужен на хосте; используем клиентский контейнер для отправки стубов.
7. Где хранить Dockerfile в репо¶
Dockerfile.nlp, Dockerfile.bim, Dockerfile.mcp-client
— лежат в корне репозитория. При билде указывай -f
и контекст . (корень проекта)
8. Запуск Docker контейнеров через Docker Desktop (GUI)¶
- Открыть Docker Desktop
Запусти Docker Desktop → перейди во вкладку Images. Там появятся образы, которые ты собрал, например:
draftai/nlp:local
draftai/bim:local
draftai/mcp-client:local.
- Запустить контейнер из образа
Найди нужный образ, например draftai/nlp:local.
Нажми Run.
Появится окно настройки запуска контейнера.
- Настроить Volumes (маппинг папок)
Нажми + Add Volume.
Укажи Host path
(путь на твоём ПК) и Container path
(куда смонтировать в контейнере).
Например:
NLP:
Host: C:\draftai\nlp_core\OUT
Container: /workspace/output
BIM:
Host: C:\draftai\nlp_core\OUT → Container: /workspace/input:ro
Host: C:\draftai\bim_core\runs → Container: /workspace/output
- Указать команду/аргументы
В окне Run есть поле Optional settings → Command.
Если образ уже имеет CMD (например NLP запускается по умолчанию), можно оставить пустым.
Если нужно передать аргументы (например BIM или MCP-client), впиши:
python /app/bim_core/bim_core/run_cli.py --tz /workspace/input/result.json --out /workspace/output -v
или
python /app/send_stubs_cli.py --stubs /workspace/runs/stubs.json --host host.docker.internal --port 9090 -v
- Запустить и проверить
Нажми Run container.
Перейди во вкладку Containers / Apps
→ выбери свой контейнер.
Внутри доступны вкладки:
Logs — посмотреть вывод.
Files — исследовать файловую систему контейнера.
Exec (CLI) — открыть терминал внутри контейнера.
Если контейнер сразу завершился, он отобразится как Exited. В этом случае:
посмотри логи;
при необходимости перезапусти контейнер с другим Command.