🐋 Docker MCP server について
Docker MCP サーバーは、自然言語で Docker を管理するための MCP サーバーです。サーバー管理者、個人で試す開発者、AI に関心を持つ人を想定しています。コンテナの構成、確認、片付けを行えます。
主な機能
- 01自然言語による計画に基づくコンテナ構成
- 02実行中のコンテナの確認とデバッグ
- 03Docker ボリュームとネットワークの管理
- 04SSH 経由のリモート Docker エンジンへの接続
活用シーン
- 01MySQL コンテナを伴う WordPress のデプロイ
- 02デバッグ時のコンテナログと統計情報の確認
- 03公開サイト用のリモート Docker ホストの管理
MCP 対応
本プロジェクトは MCP サーバーであり、コンテナ・イメージ・ネットワーク・ボリュームのツールと、コンテナのログおよび統計情報のリソーステンプレートを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🐋 Docker MCP サーバー
自然言語で Docker を管理する MCP サーバーです!
🪩 できること
- 🚀 自然言語でコンテナを構成
- 🔍 実行中のコンテナを調査してデバッグ
- 📀 Docker ボリュームで永続データを管理
❓ 対象ユーザー
- サーバー管理者:一般公開ウェブサイトの管理などのために、リモート Docker エンジンに接続します。
- いろいろ試したい方:コンテナをローカルで実行し、Docker に対応するオープンソースアプリを試します。
- AI 愛好家:LLM の能力の限界に挑戦します!
デモ
自然言語を使って WordPress をデプロイする簡単なデモです:
https://github.com/user-attachments/assets/65e35e67-bce0-4449-af7e-9f4dd773b4b3
🏎️ クイックスタート
インストール
Claude Desktop
MacOS の場合:~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows の場合:%APPDATA%/Claude/claude_desktop_config.json
uv を使用して PyPi からインストール
uv がインストールされていない場合は、お使いのシステム向けのインストール手順に従ってください:
リンク
次に、MCP サーバーの設定ファイルに以下を追加します:
"mcpServers": {
"mcp-server-docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
]
}
}
Docker を使用してインストール
利便性のため、サーバーは Docker コンテナ内で実行できます。
このリポジトリをクローンした後、Docker イメージをビルドします:
docker build -t mcp-server-docker .
次に、MCP サーバーの設定ファイルに以下を追加します:
"mcpServers": {
"mcp-server-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/var/run/docker.sock:/var/run/docker.sock",
"mcp-server-docker:latest"
]
}
}
Docker ソケットをボリュームとしてマウントしている点にご注意ください。これにより、MCP サーバーはローカルの Docker デーモンに接続し、制御できます。
📝 プロンプト
🎻 docker_compose
自然言語でコンテナを構成します。デモについては上記をご覧ください。
プロジェクト名と、必要なコンテナの説明を指定すると、残りは LLM が処理します。
このプロンプトは、LLM が plan+apply のループに入るよう指示します。LLM とのやり取りは、次の手順で進みます:
- 起動するコンテナについて、LLM に指示します
- LLM が簡潔な自然言語のプランを作成し、提示します
- 次のいずれかを選択します:
- プランを適用する
- LLM にフィードバックを伝え、LLM がプランを再作成する
例
- name:
nginx、containers: 「nginx コンテナをデプロイし、ポート 9000 で公開する」 - name:
wordpress、containers: 「WordPress コンテナと、それを支える MySQL コンテナをデプロイし、WordPress をポート 9000 で公開する」
プロジェクトの再開
このプロンプトを使って新しいチャットを開始すると、LLM は指定したプロジェクトの name で作成されたコンテナ、ボリューム、ネットワークの状態を受け取ります。
これは主に、多数のコンテナを管理していたチャットを失った場合の後片付けに役立ちます。
📔 リソース
サーバーは、現在実行中のコンテナを列挙する代わりに、リソーステンプレートを公開します:
docker://containers/{container_id}/logs(text/plain)docker://containers/{container_id}/stats(application/json)
Docker のコンテナ ID または名前を指定して、どちらの URI からもデータを読み取れます。
🔨 ツール
コンテナ
list_containerscreate_containerrun_containerrecreate_containerstart_containerfetch_container_logsstop_containerremove_container
イメージ
list_imagespull_imagepush_imagebuild_imageremove_image
ネットワーク
list_networkscreate_networkremove_network
ボリューム
list_volumescreate_volumeremove_volume
🚧 免責事項
機密データ
機密データを含むコンテナを設定しないでください。 API キーやデータベースのパスワードなどがこれに含まれます。
LLM とやり取りする機密データは、LLM がローカルマシンで実行されていない限り、必然的に漏えいしたものとみなされます。
コンテナにシークレットを安全に渡す方法に関心がある場合は、ユースケースを添えてこのリポジトリに Issue を作成してください。
作成されたコンテナの確認
LLM が作成するコンテナは慎重に確認してください。Docker は安全なサンドボックスではないため、MCP サーバーが Docker を介してホストマシンに影響を及ぼす可能性があります。
安全上の理由から、この MCP サーバーは --privileged や --cap-add/--cap-drop などの機密性の高い Docker オプションをサポートしていません。これらの機能に関心がある場合は、ユースケースを添えてこのリポジトリに issue を登録してください。
🛠️ 設定
このサーバーは、Python Docker SDK の from_env メソッドを使用します。設定の詳細については、ドキュメントを参照してください。
SSH 経由で Docker に接続する
この MCP サーバーは、SSH 経由でリモート Docker デーモンに接続できます。
MCP サーバーの定義に ssh:// ホスト URL を設定するだけです。
"mcpServers": {
"mcp-server-docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
],
"env": {
"DOCKER_HOST": "ssh://[email protected]"
}
}
}
💻 開発
開発環境の設定には Devbox の使用をお勧めします。このサーバーは MCP Python SDK v2 の高水準 MCPServer API を使用しており、直接調査できます。
uv sync --all-groups
uv run mcp dev src/mcp_server_docker/server.py:app
# or: npx @modelcontextprotocol/inspector uv run mcp-server-docker
Docker デーモンを使用せずに、隔離されたテストおよび lint スイートを実行します。
uv run pytest
uv run ruff format --check src tests
uv run ruff check src tests
開発に役立つコマンドについては、devbox.json を参照してください。
devbox のセットアップ後、Claude MCP の設定でこれを使用するように設定できます。
"docker": {
"command": "/path/to/repo/.devbox/nix/profile/default/bin/uv",
"args": [
"--directory",
"/path/to/repo/",
"run",
"mcp-server-docker"
]
},
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。