Docker MCP
Una implementación en Ruby de un servidor MCP para gestionar y usar Docker
Documentación
DockerMCP
Un servidor de Model Context Protocol (MCP) que proporciona capacidades integrales de gestión de Docker a través de una interfaz estandarizada. Esta herramienta permite a los asistentes de IA y otros clientes MCP interactuar con contenedores, imágenes, redes y volúmenes de Docker de forma programática.
⚠️ Advertencia de Seguridad
Esta herramienta es inherentemente insegura y debe usarse con extrema precaución.
- Ejecución de Código Arbitrario: La herramienta
exec_containerpermite la ejecución de comandos arbitrarios dentro de contenedores Docker - Acceso al Sistema de Archivos: La herramienta
copy_to_containerpuede copiar archivos del sistema host a los contenedores - Gestión de Contenedores: Gestión completa del ciclo de vida de contenedores, incluyendo creación, modificación y eliminación
- Control de Redes y Volúmenes: Control total sobre redes y volúmenes de Docker
Recomendaciones:
- Usar solo en entornos de confianza
- Asegurar una configuración de seguridad adecuada del daemon de Docker
- Considerar ejecutar con permisos restringidos de Docker
- Monitorear y auditar todas las operaciones de contenedores
- Tener precaución al exponer esta herramienta a clientes MCP externos o no confiables
Instalación
Instale la gema y agréguela al Gemfile de la aplicación ejecutando:
bundle add docker_mcp
Si no se está utilizando bundler para gestionar dependencias, instale la gema ejecutando:
gem install docker_mcp
Requisitos Previos
- Docker Engine instalado y en ejecución
- Ruby 3.2+
- Permisos de Docker para el usuario que ejecuta el servidor MCP
Uso
Configuración del Cliente MCP
Agregue esto a su configuración de cliente MCP después de instalar la gema:
{
"docker_mcp": {
"command": "bash",
"args": [
"-l",
"-c",
"docker_mcp"
]
}
}
Ejemplo de Uso
Una vez configurado, puede usar las herramientas a través de su cliente MCP:
# List all containers
list_containers
# Create and run a new container
run_container image="nginx:latest" name="my-web-server"
# Execute commands in a container
exec_container id="my-web-server" cmd="nginx -v"
# Copy files to a container
copy_to_container id="my-web-server" source_path="/local/file.txt" destination_path="/var/www/html/"
# View container logs
fetch_container_logs id="my-web-server"
🔨 Herramientas
Este servidor MCP proporciona 22 herramientas integrales de gestión de Docker organizadas por funcionalidad:
Gestión de Contenedores
list_containers- Listar todos los contenedores Docker (en ejecución y detenidos) con información detalladacreate_container- Crear un nuevo contenedor desde una imagen sin iniciarlorun_container- Crear e iniciar inmediatamente un contenedor desde una imagenstart_container- Iniciar un contenedor detenido existentestop_container- Detener un contenedor en ejecución de forma seguraremove_container- Eliminar un contenedor (debe estar detenido primero a menos que se fuerce)recreate_container- Detener, eliminar y recrear un contenedor con la misma configuraciónexec_container⚠️ - Ejecutar comandos arbitrarios dentro de un contenedor en ejecuciónfetch_container_logs- Recuperar registros de stdout/stderr de un contenedorcopy_to_container⚠️ - Copiar archivos o directorios del host al contenedor
Gestión de Imágenes
list_images- Listar todas las imágenes Docker disponibles localmentepull_image- Descargar una imagen de un registro Dockerpush_image- Subir una imagen a un registro Dockerbuild_image- Construir una nueva imagen desde un Dockerfiletag_image- Crear una nueva etiqueta para una imagen existenteremove_image- Eliminar una imagen del almacenamiento local
Gestión de Redes
list_networks- Listar todas las redes Dockercreate_network- Crear una nueva red Dockerremove_network- Eliminar una red Docker
Gestión de Volúmenes
list_volumes- Listar todos los volúmenes Dockercreate_volume- Crear un nuevo volumen Docker para datos persistentesremove_volume- Eliminar un volumen Docker
Parámetros de Herramientas
La mayoría de las herramientas aceptan parámetros estándar de Docker:
- ID/Nombre del Contenedor: Puede usar el ID completo del contenedor, ID corto o nombre del contenedor
- Imagen: Especifique imágenes usando el formato
name:tag(por ejemplo,nginx:latest,ubuntu:22.04) - Puertos: Use la sintaxis de mapeo de puertos de Docker (por ejemplo,
"8080:80") - Volúmenes: Use la sintaxis de montaje de volúmenes de Docker (por ejemplo,
"/host/path:/container/path") - Entorno: Establezca variables de entorno como pares
KEY=VALUE
Casos de Uso Comunes
Configuración del Entorno de Desarrollo
# Pull development image
pull_image from_image="node:18-alpine"
# Create development container with volume mounts
run_container image="node:18-alpine" name="dev-env" \
host_config='{"PortBindings":{"3000/tcp":[{"HostPort":"3000"}]},"Binds":["/local/project:/app"]}'
# Execute development commands
exec_container id="dev-env" cmd="npm install"
exec_container id="dev-env" cmd="npm start"
Depuración de Contenedores
# Check container status
list_containers
# View container logs
fetch_container_logs id="problematic-container"
# Execute diagnostic commands
exec_container id="problematic-container" cmd="ps aux"
exec_container id="problematic-container" cmd="df -h"
exec_container id="problematic-container" cmd="netstat -tlnp"
Gestión de Archivos
# Copy configuration files to container
copy_to_container id="web-server" \
source_path="/local/nginx.conf" \
destination_path="/etc/nginx/"
# Copy application code
copy_to_container id="app-container" \
source_path="/local/src" \
destination_path="/app/"
Manejo de Errores
El servidor proporciona mensajes de error detallados para problemas comunes:
- Contenedor No Encontrado: Al hacer referencia a contenedores inexistentes
- Imagen No Disponible: Al intentar usar imágenes que no están descargadas localmente
- Permiso Denegado: Cuando el acceso al daemon de Docker está restringido
- Conflictos de Red: Al crear redes con configuraciones conflictivas
- Problemas de Montaje de Volúmenes: Cuando las rutas especificadas no existen o carecen de permisos
Todos los errores incluyen mensajes descriptivos para ayudar a diagnosticar y resolver problemas.
Solución de Problemas
Problemas de Conexión con el Daemon de Docker
# Check if Docker daemon is running
docker info
# Verify Docker permissions
docker ps
# Check MCP server logs for connection errors
Fallos en Operaciones de Contenedores
- Asegúrese de que los IDs/nombres de contenedores sean correctos (use
list_containerspara verificar) - Verifique que los contenedores estén en el estado esperado (en ejecución/detenidos)
- Verifique la disponibilidad de imágenes con
list_images
Problemas de Permisos
- Asegúrese de que el usuario que ejecuta el servidor MCP tenga permisos de Docker
- Considere agregar al usuario al grupo
docker:sudo usermod -aG docker $USER - Verifique los permisos del socket de Docker:
ls -la /var/run/docker.sock
Limitaciones
- Específico de Plataforma: Algunas operaciones de contenedores pueden comportarse de manera diferente entre sistemas operativos
- Versión de la API de Docker: Requiere una versión compatible de la API del motor Docker
- Límites de Recursos: Las copias de archivos grandes y las operaciones de imágenes pueden agotar el tiempo de espera
- Operaciones Concurrentes: El uso concurrente intensivo puede afectar el rendimiento
Contribuciones
¡Damos la bienvenida a contribuciones! Áreas de mejora:
- Seguridad Mejorada: Verificaciones de seguridad adicionales y validación de permisos
- Mejor Manejo de Errores: Mensajes de error más específicos y sugerencias de recuperación
- Optimización del Rendimiento: Transmisión para operaciones de archivos grandes
- Funcionalidad Extendida: Soporte para Docker Compose, Swarm, etc.
- Pruebas: Cobertura integral de pruebas para todas las herramientas
Desarrollo
Después de clonar el repositorio, ejecute bin/setup para instalar las dependencias. Luego, ejecute rake spec para ejecutar las pruebas. También puede ejecutar bin/console para un prompt interactivo que le permitirá experimentar.
Ejecución de Pruebas
# Install dependencies
bundle install
# Run the test suite
bundle exec rake spec
# Run tests with coverage
bundle exec rake spec COVERAGE=true
Configuración de Desarrollo Local
# Clone the repository
git clone https://github.com/afstanton/docker_mcp.git
cd docker_mcp
# Install dependencies
bin/setup
# Start development console
bin/console
# Build the gem locally
bundle exec rake build
# Install locally built gem
bundle exec rake install
Pruebas con Cliente MCP
# Start the MCP server locally
bundle exec exe/docker_mcp
# Configure your MCP client to use local development server
# Use file path instead of installed gem command
Para instalar esta gema en su máquina local, ejecute bundle exec rake install. Para publicar una nueva versión, actualice el número de versión en version.rb, y luego ejecute bundle exec rake release, que creará una etiqueta git para la versión, enviará los commits de git y la etiqueta creada, y enviará el archivo .gem a rubygems.org.
Licencia
La gema está disponible como código abierto bajo los términos de la Licencia MIT.