Docker MCP
Uma implementação em Ruby de um servidor MCP para gerenciar e usar Docker
Documentação
DockerMCP
Um servidor Model Context Protocol (MCP) que fornece recursos abrangentes de gerenciamento do Docker por meio de uma interface padronizada. Esta ferramenta permite que assistentes de IA e outros clientes MCP interajam programaticamente com contêineres, imagens, redes e volumes do Docker.
⚠️ Aviso de Segurança
Esta ferramenta é inerentemente insegura e deve ser usada com extrema cautela.
- Execução de Código Arbitrário: A ferramenta
exec_containerpermite a execução de comandos arbitrários dentro de contêineres Docker - Acesso ao Sistema de Arquivos: A ferramenta
copy_to_containerpode copiar arquivos do sistema host para contêineres - Gerenciamento de Contêineres: Gerenciamento completo do ciclo de vida dos contêineres, incluindo criação, modificação e exclusão
- Controle de Redes e Volumes: Controle total sobre redes e volumes do Docker
Recomendações:
- Use apenas em ambientes confiáveis
- Garanta uma configuração de segurança adequada do daemon do Docker
- Considere executar com permissões restritas do Docker
- Monitore e audite todas as operações de contêineres
- Tenha cuidado ao expor esta ferramenta a clientes MCP externos ou não confiáveis
Instalação
Instale a gem e adicione ao Gemfile da aplicação executando:
bundle add docker_mcp
Se o bundler não estiver sendo usado para gerenciar dependências, instale a gem executando:
gem install docker_mcp
Pré-requisitos
- Docker Engine instalado e em execução
- Ruby 3.2+
- Permissões do Docker para o usuário que executa o servidor MCP
Uso
Configuração do Cliente MCP
Adicione isto à configuração do seu cliente MCP após instalar a gem:
{
"docker_mcp": {
"command": "bash",
"args": [
"-l",
"-c",
"docker_mcp"
]
}
}
Exemplo de Uso
Após a configuração, você pode usar as ferramentas por meio do seu 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"
🔨 Ferramentas
Este servidor MCP fornece 22 ferramentas abrangentes de gerenciamento do Docker organizadas por funcionalidade:
Gerenciamento de Contêineres
list_containers- Lista todos os contêineres Docker (em execução e parados) com informações detalhadascreate_container- Cria um novo contêiner a partir de uma imagem sem iniciá-lorun_container- Cria e inicia imediatamente um contêiner a partir de uma imagemstart_container- Inicia um contêiner parado existentestop_container- Para um contêiner em execução de forma graciosaremove_container- Exclui um contêiner (deve ser parado primeiro, a menos que forçado)recreate_container- Para, remove e recria um contêiner com a mesma configuraçãoexec_container⚠️ - Executa comandos arbitrários dentro de um contêiner em execuçãofetch_container_logs- Recupera logs de stdout/stderr de um contêinercopy_to_container⚠️ - Copia arquivos ou diretórios do host para o contêiner
Gerenciamento de Imagens
list_images- Lista todas as imagens Docker disponíveis localmentepull_image- Baixa uma imagem de um registro Dockerpush_image- Envia uma imagem para um registro Dockerbuild_image- Constrói uma nova imagem a partir de um Dockerfiletag_image- Cria uma nova tag para uma imagem existenteremove_image- Exclui uma imagem do armazenamento local
Gerenciamento de Redes
list_networks- Lista todas as redes Dockercreate_network- Cria uma nova rede Dockerremove_network- Exclui uma rede Docker
Gerenciamento de Volumes
list_volumes- Lista todos os volumes Dockercreate_volume- Cria um novo volume Docker para dados persistentesremove_volume- Exclui um volume Docker
Parâmetros das Ferramentas
A maioria das ferramentas aceita parâmetros padrão do Docker:
- ID/Nome do Contêiner: Pode usar o ID completo do contêiner, ID curto ou nome do contêiner
- Imagem: Especifique imagens usando o formato
name:tag(ex.:nginx:latest,ubuntu:22.04) - Portas: Use a sintaxe de mapeamento de portas do Docker (ex.:
"8080:80") - Volumes: Use a sintaxe de montagem de volumes do Docker (ex.:
"/host/path:/container/path") - Ambiente: Defina variáveis de ambiente como pares
KEY=VALUE
Casos de Uso Comuns
Configuração de Ambiente de Desenvolvimento
# 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"
Depuração de Contêineres
# 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"
Gerenciamento de Arquivos
# 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/"
Tratamento de Erros
O servidor fornece mensagens de erro detalhadas para problemas comuns:
- Contêiner Não Encontrado: Ao referenciar contêineres inexistentes
- Imagem Indisponível: Ao tentar usar imagens que não foram baixadas localmente
- Permissão Negada: Quando o acesso ao daemon do Docker está restrito
- Conflitos de Rede: Ao criar redes com configurações conflitantes
- Problemas de Montagem de Volume: Quando os caminhos especificados não existem ou não têm permissões
Todos os erros incluem mensagens descritivas para ajudar a diagnosticar e resolver problemas.
Solução de Problemas
Problemas de Conexão com o Daemon do Docker
# Check if Docker daemon is running
docker info
# Verify Docker permissions
docker ps
# Check MCP server logs for connection errors
Falhas em Operações de Contêineres
- Garanta que os IDs/nomes dos contêineres estejam corretos (use
list_containerspara verificar) - Verifique se os contêineres estão no estado esperado (em execução/parados)
- Verifique a disponibilidade da imagem com
list_images
Problemas de Permissão
- Garanta que o usuário que executa o servidor MCP tenha permissões do Docker
- Considere adicionar o usuário ao grupo
docker:sudo usermod -aG docker $USER - Verifique as permissões do socket do Docker:
ls -la /var/run/docker.sock
Limitações
- Específico da Plataforma: Algumas operações de contêineres podem se comportar de forma diferente entre sistemas operacionais
- Versão da API do Docker: Requer uma versão compatível da API do Docker Engine
- Limites de Recursos: Cópias de arquivos grandes e operações de imagem podem expirar
- Operações Concorrentes: Uso concorrente intenso pode impactar o desempenho
Contribuindo
Aceitamos contribuições! Áreas para melhoria:
- Segurança Aprimorada: Verificações de segurança adicionais e validação de permissões
- Melhor Tratamento de Erros: Mensagens de erro mais específicas e sugestões de recuperação
- Otimização de Desempenho: Streaming para operações de arquivos grandes
- Funcionalidade Estendida: Suporte para Docker Compose, Swarm, etc.
- Testes: Cobertura abrangente de testes para todas as ferramentas
Desenvolvimento
Após clonar o repositório, execute bin/setup para instalar as dependências. Em seguida, execute rake spec para rodar os testes. Você também pode executar bin/console para um prompt interativo que permitirá experimentar.
Executando Testes
# Install dependencies
bundle install
# Run the test suite
bundle exec rake spec
# Run tests with coverage
bundle exec rake spec COVERAGE=true
Configuração de Desenvolvimento 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
Testando com 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 gem em sua máquina local, execute bundle exec rake install. Para lançar uma nova versão, atualize o número da versão em version.rb e, em seguida, execute bundle exec rake release, que criará uma tag git para a versão, enviará os commits do git e a tag criada, e enviará o arquivo .gem para rubygems.org.
Licença
A gem está disponível como código aberto sob os termos da Licença MIT.