Docker и Model Context Protocol (MCP) — это естественная пара. Docker обеспечивает изоляцию, воспроизводимость и портабельность инфраструктуры; MCP предоставляет стандартизированный способ взаимодействия ИИ-ассистентов с этой инфраструктурой. Вместе они создают мощную основу для разработки с ИИ, которая одновременно гибка и безопасна.
В этом руководстве мы рассмотрим два разных, но взаимодополняющих подхода:
- Docker как средство запуска MCP — запуск самих MCP серверов внутри Docker контейнеров
- Docker MCP сервер — MCP сервер, дающий вашему ИИ-ассистенту контроль над Docker контейнерами и образами
Оба подхода доступны в каталоге серверов Mindaxis, откуда можно экспортировать готовые конфиги для Cursor, VS Code, Claude Code и других инструментов через Конструктор.
Часть 1: Docker MCP сервер — управление Docker через ИИ
Docker MCP сервер (@modelcontextprotocol/server-docker) — это мост между вашим ИИ-ассистентом и Docker Engine API. После настройки ваш ИИ-ассистент сможет выводить список контейнеров, запускать и останавливать сервисы, просматривать логи, скачивать образы и проверять состояние контейнеров — не покидая IDE или окно чата.
Возможности Docker MCP сервера
- Список запущенных и остановленных контейнеров с их статусом и потреблением ресурсов
- Запуск, остановка, перезапуск и удаление контейнеров
- Получение логов контейнеров для отладки
- Список доступных образов и загрузка новых из реестра
- Инспектирование конфигурации, сети и примонтированных томов контейнера
- Выполнение команд внутри запущенного контейнера (
docker exec) - Запрос статуса сервисов Docker Compose
Это незаменимо во время отладки. Вместо переключения в терминал можно спросить у ИИ-ассистента: «Покажи последние 50 строк из логов контейнера postgres» или «Почему сервис api падает — проверь его логи и переменные окружения».
Установка и настройка
Docker MCP сервер взаимодействует с Docker Engine через Unix-сокет, поэтому ему нужен доступ к /var/run/docker.sock. В macOS и Windows Docker Desktop открывает этот сокет автоматически.
Для Cursor (.cursor/mcp.json):
{
"mcpServers": {
"docker": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-docker"]
}
}
}
На Linux убедитесь, что ваш пользователь состоит в группе docker:
sudo usermod -aG docker $USER
newgrp docker
Безопасность Docker MCP сервера
Система безопасности Mindaxis оценивает Docker MCP сервер как высокорискованный, поскольку доступ к Docker-сокету фактически эквивалентен root-доступу на хост-машине.
Рекомендуемые меры защиты:
- Используйте Docker в rootless-режиме или TCP-сокет с TLS
- Ведите журнал всех вызовов MCP-инструментов для аудита
- Никогда не запускайте Docker MCP сервер в CI/CD, где Docker-сокет управляет продакшн-инфраструктурой
Часть 2: Запуск MCP серверов внутри Docker контейнеров
Вместо глобальной установки MCP серверов через npx вы можете запускать их внутри Docker контейнеров. Такой подход обеспечивает более строгую изоляцию: MCP сервер в контейнере не имеет доступа к файловой системе хоста, переменным окружения или сети без явного разрешения.
Зачем контейнеризировать MCP серверы?
- Изоляция зависимостей — никаких конфликтов версий Node, Python или бинарных файлов между серверами
- Воспроизводимость — один и тот же образ работает одинаково на вашем ноутбуке, у коллеги и в CI
- Усиленная безопасность — скомпрометированный MCP сервер не может прочитать файлы хоста по умолчанию
- Версионирование — фиксируйте конкретные теги образов, чтобы избежать неожиданных обновлений в середине проекта
- Стандартизация для команды — добавьте
docker-compose.yml, чтобы вся команда развернула одинаковое окружение одной командой
Запуск одного MCP сервера в Docker
MCP серверы на транспорте stdio общаются через stdin/stdout. При запуске в Docker stdin/stdout контейнера передаются напрямую хостовому процессу. Пример с Filesystem MCP сервером:
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/project:/workspace:ro",
"mcp/filesystem",
"/workspace"
]
}
}
}
Ключевые флаги:
--rm— удалить контейнер после завершения-i— держать stdin открытым (обязательно для stdio-транспорта)-v /path/to/project:/workspace:ro— монтировать проект в режиме только для чтения
Docker Compose для нескольких MCP серверов
Когда нужно несколько MCP серверов одновременно, Docker Compose — самое практичное решение. Создайте docker-compose.mcp.yml в корне проекта:
version: "3.9"
services:
mcp-filesystem:
image: mcp/filesystem:latest
volumes:
- ./:/workspace:ro
stdin_open: true
restart: unless-stopped
mcp-postgres:
image: mcp/postgres:latest
environment:
POSTGRES_URL: "postgresql://user:${DB_PASSWORD}@db:5432/myapp"
depends_on:
- db
stdin_open: true
restart: unless-stopped
mcp-github:
image: mcp/github:latest
environment:
GITHUB_TOKEN: "${GITHUB_TOKEN}"
stdin_open: true
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: "${DB_PASSWORD}"
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Запустите все сервисы:
docker compose -f docker-compose.mcp.yml up -d
Dockerfile для кастомного MCP сервера
Если нужен собственный MCP сервер — например, для взаимодействия с внутренним API — его легко контейнеризировать:
FROM node:22-alpine AS base
WORKDIR /app
FROM base AS deps
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
FROM base AS runtime
COPY --from=deps /app/node_modules ./node_modules
COPY src ./src
USER node
ENTRYPOINT ["node", "src/index.js"]
Используйте USER node вместо root. Это простая мера защиты, которая предотвращает доступ процесса MCP сервера к системным файлам.
Часть 3: Безопасность Docker + MCP
Контейнеризация MCP серверов — значительное улучшение безопасности по сравнению с запуском на хосте, но требует грамотной настройки.
Изоляция файловой системы
Главное правило: монтируйте только то, что нужно MCP серверу, и по возможности только на чтение:
-v /home/user/projects/myapp:/workspace:ro
Сетевая изоляция
Для MCP серверов, работающих только через stdio-транспорт, можно полностью отключить сеть:
docker run --rm -i --network=none mcp/filesystem /workspace
Безопасность переменных окружения
Никогда не хардкодьте секреты в конфигурационных файлах MCP. Используйте подстановку переменных окружения:
{
"mcpServers": {
"github": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "GITHUB_TOKEN", "mcp/github"],
"env": {
"GITHUB_TOKEN": "${env:GITHUB_TOKEN}"
}
}
}
}
Полный пример: стек разработки с Docker + MCP
Полная настройка с локальной PostgreSQL, GitHub MCP сервером и файловым MCP сервером — все в Docker, подключено к Cursor:
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "${workspaceFolder}:/workspace:ro",
"mcp/filesystem", "/workspace"
]
},
"postgres": {
"command": "docker",
"args": ["run", "--rm", "-i", "--network", "host", "-e", "POSTGRES_URL", "mcp/postgres"],
"env": { "POSTGRES_URL": "${env:DATABASE_URL}" }
},
"github": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "GITHUB_TOKEN", "mcp/github"],
"env": { "GITHUB_TOKEN": "${env:GITHUB_TOKEN}" }
}
}
}
Сгенерировать эту конфигурацию автоматически можно в Конструкторе Mindaxis — выберите нужные серверы, укажите Cursor как цель экспорта и скачайте готовый JSON-файл.
Заключение
Docker и MCP — мощная комбинация для разработки с ИИ. Запуск MCP серверов в контейнерах обеспечивает изоляцию зависимостей, воспроизводимость и реальные границы безопасности. Docker MCP сервер даёт вашему ИИ-ассистенту видимость контейнерной инфраструктуры для быстрой отладки.
Практические рекомендации:
- На машинах разработчиков: запускайте MCP серверы через Docker с монтированием файловой системы только на чтение где возможно
- Для серверов с секретами (GitHub, база данных): всегда используйте подстановку переменных окружения
- Для команд: добавьте
docker-compose.mcp.yml, чтобы у всех было одинаковое MCP-окружение - Для проверки безопасности: используйте сканер безопасности Mindaxis перед деплоем любого MCP-конфига
Просмотрите все Docker-совместимые MCP серверы в каталоге Mindaxis и начните строить контейнеризированный стек разработки с ИИ уже сегодня.
