בדיקת קונטיינרים יומית
Every weekday at 9:00, list my Docker containers with their status, tell me which ones are not running that were running yesterday, and for each of those show the last twenty lines of its logs.
שרת MCP מאומת: Docker
התשובה הקצרה
אומת לאחרונה 2026-08-03
שרת ה-MCP ל-Docker מאפשר לעוזר AI להפעיל את Docker על ה-Mac שלכם: לרשום קונטיינרים, לקרוא את הלוגים שלהם, להפעיל ולעצור אותם, למשוך ולבנות אימג׳ים ולנהל רשתות ונפחים. זוהי חבילה קהילתית בשם mcp-server-docker, היא אינה תוכנה של Docker Inc., והיא אינה מבקשת מפתח API או חשבון, כי היא מגיעה אל ה-daemon דרך אותו socket מקומי שבו משתמשת הפקודה docker. מה שהיא כן דורשת זה ש-Docker עצמו ירוץ: כשה-daemon אינו זמין, השרת קורס עוד לפני שהספיק לומר שלום, ולכדנו גם את הקריסה הזו. לא הסתפקנו במה שכתוב ב-README. הפעלנו את Docker, הרצנו את השרת, דיברנו איתו בפרוטוקול, ספרנו את כל תשעה עשר הכלים, הרצנו קריאות אמיתיות מול מצב ה-Docker של ה-Mac הזה ושמרנו את הפלט הגולמי, כולל השגיאות המדויקות שהוא מחזיר כשקונטיינר, אימג׳ או רשת אינם קיימים. הכל נמצא בעמוד הזה. [1][3][6]
אימות
השיטה
הפעלנו את Docker Desktop על ה-Mac של הבדיקה, ואז הרצנו את השרת עם uvx על גבי stdio בלי אף משתנה סביבה, השלמנו את לחיצת היד של MCP, קראנו ל-tools/list והרצנו שמונה קריאות כלי אמיתיות בשלוש הפעלות. ארבע מהן ענו ממצב ה-Docker של ה-Mac הזה עצמו: list_networks, list_volumes ו-list_containers פעמיים, והדוגמה למטה היא אחת מהן. ארבע נועדו להיכשל ואכן נכשלו, ומהן הגיע קטע פתרון התקלות. שום קריאה שלנו לא יצרה, שינתה או מחקה דבר: שלוש הקריאות שיכלו לשנות משהו פנו כולן לשמות שאינם קיימים וחזרו עם 404. הפעלה רביעית, שבה DOCKER_HOST הופנה אל socket שאינו קיים, שחזרה את הקריסה שמתקבלת כש-Docker אינו רץ, ולא הגיעה כלל ללחיצת היד. על ה-Mac רצו Docker Desktop 4.5.0 עם Engine 20.10.12 ו-Docker API 1.41; uvx התקינה את mcp-server-docker 0.2.1 מעל Python 3.12.11 עם docker-py 7.2.0 ועם ה-SDK של MCP ל-Python בגרסה 1.29.0. השרת אינו מדפיס דבר בהפעלה, לא ל-stdout ולא ל-stderr, ולכן מה שמופיע למטה הוא תגובת ה-initialize הגולמית בשורה אחת, בדיוק כפי שהגיעה מהחיבור.
הודעת הפתיחה של השרת
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"docker-server","version":"1.29.0"}}}קריאת כלי אמיתית אחת
tools/call list_networks {}[
{
"id": "dcf9d8f81c4ca5896a85a1eedface31f2a8e7db9cc115f417485ea467215c7aa",
"name": "bridge",
"short_id": "dcf9d8f81c4c",
"driver": "bridge",
"scope": "local",שורות אמיתיות מהתוצאה שנלכדה: מספיק כדי להוכיח שהקריאה נענתה.
כלים
השרת ענה ל-tools/list עם 19 כלים בתאריך 2026-08-03. השמות, התיאורים והפרמטרים למטה הם המילים שלו עצמו, מועתקים מהתשובה הזו וללא עריכה.
| כלי | מה הוא עושה |
|---|---|
| list_containersallfilters | List all Docker containers |
| create_containerdetachimage*nameentrypointcommandnetworkenvironmentportsvolumeslabelsauto_remove | Create a new Docker container |
| run_containerdetachimage*nameentrypointcommandnetworkenvironmentportsvolumeslabelsauto_remove | Run an image in a new Docker container (preferred over `create_container` + `start_container`) |
| recreate_containerdetachimage*nameentrypointcommandnetworkenvironmentportsvolumeslabelsauto_removecontainer_id | Stop and remove a container, then run a new container. Fails if the container does not exist. |
| start_containercontainer_id* | Start a Docker container |
| fetch_container_logscontainer_id*tail | Fetch logs for a Docker container |
| stop_containercontainer_id* | Stop a Docker container |
| remove_containercontainer_id*force | Remove a Docker container |
| list_imagesnameallfilters | List Docker images |
| pull_imagerepository*tag | Pull a Docker image |
| push_imagerepository*tag | Push a Docker image |
| build_imagepath*tag*dockerfile | Build a Docker image from a Dockerfile |
| remove_imageimage*force | Remove a Docker image |
| list_networksfilters | List Docker networks |
| create_networkname*driverinternallabels | Create a Docker network |
| remove_networknetwork_id* | Remove a Docker network |
| list_volumes | List Docker volumes |
| create_volumename*driverlabels | Create a Docker volume |
| remove_volumevolume_name*force | Remove a Docker volume |
פרמטרים המסומנים ב-* הם חובה.
התקנה
העתיקו את הבלוק של האפליקציה שלכם. כל אחד מהם הוא ההגדרה המדויקת שאיתה אימתנו את השרת.
פתחו את הקובץ ~/Library/Application Support/Claude/claude_desktop_config.json (בתוך Claude Desktop: Settings, אחר כך Developer, אחר כך Edit Config) והוסיפו:
{
"mcpServers": {
"docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
]
}
}
}בלי משתני סביבה ובלי ארגומנט של תיקיה: השרת מוצא את ה-Docker המקומי שלכם בעצמו. הפעילו קודם את Docker Desktop, ואז סגרו ופתחו מחדש את Claude Desktop. אם השרת לא מופיע, הזינו בשדה הפקודה את הנתיב המלא שמדפיסה הפקודה which uvx, כי אפליקציית Mac שנפתחה מה-Dock לא תמיד יורשת את ה-PATH של המעטפת שלכם. [10][5]
פקודה אחת בטרמינל:
claude mcp add docker -- uvx mcp-server-docker
כל מה שאחרי המקף הכפול הוא הפקודה המדויקת ש-Claude Code יריץ, וזו הפקודה שאימתנו. ודאו ש-Docker רץ לפני שאתם פותחים הפעלה, אחרת השרת ימות כבר בהפעלה. [11]
הוסיפו ל-~/.cursor/mcp.json עבור כל הפרויקטים, או ל-.cursor/mcp.json בתוך פרויקט אחד:
{
"mcpServers": {
"docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
]
}
}
}Cursor קורא את הקובץ מחדש אחרי הפעלה מחדש. כדי להפעיל מנוע Docker במחשב אחר במקום המקומי, הוסיפו אובייקט env עם DOCKER_HOST שמצביע על כתובת ssh://, אפשרות שהשרת תומך בה דרך ה-SDK של Docker ל-Python. [12][5]
בלי קובץ JSON ובלי טרמינל. ב-Routines: Settings, אחר כך Assistant, אחר כך Connections, אחר כך Add MCP Server. העבירו את הטופס ל-Command (stdio) והזינו:
Name Docker Command uvx Arguments mcp-server-docker
השאירו את Environment Variables ריק. הפעילו את Docker Desktop לפני שאתם לוחצים Test Connection: שרת תקין עונה עם מספר הכלים שלו, תשעה עשר עבור השרת הזה, ואילו Docker כבוי יחזיר לכם שרת מת. [13]
בלי טרמינל
אם מעולם לא פתחתם את הטרמינל ואין לכם כוונה להתחיל, זה המסלול שלכם, עם חריג אחד בלתי נמנע שמצוין בשלב הראשון. Routines היא אפליקציית Mac שמריצה שרתי MCP בשבילכם: ממלאים שלושה שדות פעם אחת, והכלים של השרת זמינים ל-AI שלכם בצ׳אט ובשגרות מתוזמנות.
01
הורידו את האפליקציה מ-getroutines.ai/download, גררו אותה ל-Applications והתחברו. השרת הזה כתוב ב-Python, ולכן הוא זקוק גם ל-uv, הכלי שמספק את הפקודה uvx: התקינו אותו מ-astral.sh/uv, או בשורת טרמינל אחת אם כבר יש לכם Homebrew, brew install uv. והוא זקוק ל-Docker Desktop מ-docker.com, כי כל העניין הוא להפעיל את ה-Docker שרץ על ה-Mac שלכם.
02
לחצו על החשבון שלכם בתחתית סרגל הצד ובחרו Settings. פתחו את הקטע Assistant, אחר כך את הלשונית Connections, גללו אל MCP Servers ולחצו על Add MCP Server.
03
הטופס נפתח במצב URL. העבירו אותו ל-Command (stdio): השרת הזה הוא פקודה שרצה על ה-Mac שלכם, לא כתובת אינטרנט.
04
Name: Docker. Command: uvx. Arguments: mcp-server-docker, לבד, בלי שום דבר אחריו. אין תיקיה להרשות ואין מפתח להדביק, כי השרת מדבר עם Docker דרך ה-socket המקומי שלחשבון שלכם כבר יש גישה אליו.
05
השאירו את Environment Variables ריק, השרת הזה לא צריך משתנים. פתחו את Docker Desktop והמתינו עד שהלווייתן בשורת התפריטים יפסיק לזוז, ואז לחצו Test Connection: Routines מפעילה את השרת ומדווחת כמה כלים היא מצאה, תשעה עשר עבור השרת הזה. אחר כך לחצו Add Server.
06
הכלים עובדים בצ׳אט מיד, כך שאפשר לשאול אילו קונטיינרים רצים ולמה אחד מהם ממשיך לעלות מחדש. כדי לתת לשגרה מתוזמנת להשתמש בהם, פתחו את השגרה, מצאו את הכרטיס Tools & connections וסמנו את השרת תחת Apps.
רעיונות לשגרות
אחרי שהשרת מחובר, שגרה מתוזמנת יכולה להשתמש בכלים שלו גם כשאתם לא מול המסך. העתיקו פרומפט, הדביקו אותו ב-Routines ובחרו שעה. הפרומפטים כתובים באנגלית בכוונה, מדביקים אותם בדיוק כפי שהם.
Every weekday at 9:00, list my Docker containers with their status, tell me which ones are not running that were running yesterday, and for each of those show the last twenty lines of its logs.
Every Monday at 8:00, list my Docker images and volumes, flag every one that no container is using, and give me the list so I can decide what to remove myself.
Every Friday at 17:00, fetch the last hundred log lines from each running container, and write me one short paragraph per container about anything that looks like an error or a repeated warning.
פתרון תקלות
שגיאות אמיתיות שנלכדו בריצת האימות, מודפסות בדיוק כפי שהשרת החזיר אותן.
מה רואים
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))הפתרון
Docker אינו רץ, או שהשרת מחפש אותו במקום הלא נכון. זו אינה תקלה רכה שאפשר לעקוף מתוך הצ׳אט: החבילה קוראת ל-docker.from_env() עוד לפני שהיא פותחת את חיבור ה-MCP, ולכן התהליך מסתיים לפני שהלקוח מספיק להשלים את לחיצת היד, וכל מה שהלקוח מספר לכם הוא שהשרת מת. שחזרנו את זה בכוונה כשהפנינו את DOCKER_HOST אל socket שאינו קיים. הפעילו את Docker Desktop, המתינו שהלווייתן בשורת התפריטים ייצב, והפעילו מחדש את לקוח ה-MCP. אם הגדרתם את DOCKER_HOST בעצמכם, בדקו את הכתובת שבו.
מה רואים
404 Client Error for http+docker://localhost/v1.41/containers/no-such-container-mcp-verify/json: Not Found ("No such container: no-such-container-mcp-verify")הפתרון
השם או המזהה הגיעו ל-Docker ול-Docker אין אותם: בדרך כלל שגיאת הקלדה, קונטיינר שנמחק, או כזה שקיים רק במחשב אחר. גרמנו לזה בכוונה עם שם מומצא. בקשו קודם list_containers כשהערך all הוא true, ואז חזרו על הבקשה עם שם מתוך הרשימה. רשתות ונפחים שנמחקו חוזרים באותה צורה, עם 404 משלהם.
מה רואים
404 Client Error for http+docker://localhost/v1.41/images/create?tag=latest&fromImage=mcp-verify-no-such-image-2026: Not Found ("pull access denied for mcp-verify-no-such-image-2026, repository does not exist or may require 'docker login': denied: requested access to the resource is denied")הפתרון
או שאין מאגר כזה ברישום, או שהוא לא מוכן להראות אותו לכם. ההודעה מכסה את שני המקרים בבת אחת, וגרמנו לה עם שם אימג׳ שאינו קיים. בדקו את האיות ואת התגית, ואם האימג׳ פרטי, ודאו שה-Mac הזה כבר מחובר לאותו רישום לפני שאתם מבקשים: אף אחד מתשעה עשר הכלים אינו יכול לחבר אתכם, ולכן השרת אינו יכול לתקן את זה באמצע השיחה.
הפתרון
הפקודה uvx שייכת ל-uv. אם uv לא מותקנת, כל לקוח בעמוד הזה ייכשל בשלב ההפעלה עוד לפני שהשרת מספיק לומר משהו. התקינו אותה מ-astral.sh/uv, ואז הריצו which uvx בטרמינל: אם היא מדפיסה נתיב ואפליקציית Mac עדיין לא מצליחה להפעיל את השרת, הדביקו את הנתיב המלא בשדה הפקודה, כי אפליקציה שנפתחה מה-Dock לא תמיד יורשת את ה-PATH של המעטפת שלכם.
שאלות נפוצות
זוהי תוכנית Python קטנה שיושבת בין עוזר AI לבין ה-Docker שרץ על ה-Mac שלכם. אחרי החיבור, Claude יכול לרשום את הקונטיינרים והאימג׳ים שלכם, לקרוא לוגים של קונטיינרים, להפעיל ולעצור קונטיינרים, למשוך ולבנות אימג׳ים וליצור או למחוק רשתות ונפחים, הכל דרך ה-API הרגיל של Docker. היא רצה כתהליך מקומי ומדברת עם אפליקציית ה-AI על גבי stdio. [5][6]
השרת הרץ חושף 19 כלים: קונטיינרים (list_containers, create_container, run_container, recreate_container, start_container, fetch_container_logs, stop_container, remove_container), אימג׳ים (list_images, pull_image, push_image, build_image, remove_image), רשתות (list_networks, create_network, remove_network) ונפחים (list_volumes, create_volume, remove_volume). הטבלה למעלה היא פלט ה-tools/list החי, מילה במילה. אותה לחיצת יד גם מכריזה על יכולות של prompts ו-resources, וה-README מתאר prompt אחד לפריסות Compose ומשאבים של סטטיסטיקות ולוגים לכל קונטיינר. [5]
לא. mcp-server-docker היא חבילה קהילתית של Christian Kreiling, עם 731 כוכבים ב-GitHub ובלי גרסה חדשה מאז יוני 2025. ל-Docker Inc. יש אמנם תוכנת MCP משלה, אבל זה דבר אחר לגמרי: ה-MCP Toolkit, שבנוי על הפרויקט הפתוח docker/mcp-gateway, הוא שער שמריץ שרתי MCP של אחרים כקונטיינרים, והכתובת mcp.docker.com מפנה לקטלוג שלהם ב-hub.docker.com/mcp. זה ההפך ממה שהעמוד הזה מכסה, שהוא שרת שמאפשר לעוזר לנהל את Docker עצמו. לא בדקנו את ה-Toolkit: הוא דורש גרסת Docker Desktop חדשה בהרבה מזו שרצה על ה-Mac של הבדיקה שלנו. [3][7][8][9]
התייחסו אליו ככלי חזק, לא כארגז חול. אין כאן רשימת היתר כמו התיקיות של שרת הקבצים: כל מה שהחשבון שלכם יכול לעשות ל-Docker, השרת הזה יכול לעשות, ורק חמישה מתוך תשעה עשר הכלים הם קריאה בלבד, כלומר ארבעה עשר האחרים משנים משהו, ובהם remove_container, remove_image ו-remove_volume. הפרויקט אומר זאת בעצמו, באותיות גדולות: אל תגדירו קונטיינרים עם מידע רגיש, ובדקו את הקונטיינרים שהמודל יוצר. הוא כן מסרב לאפשרויות המסוכנות ביותר, בלי תמיכה במצב privileged ובדגלי הרשאות. קראו מה שהעוזר מציע לפני שאתם מאשרים, והרחיקו אותו מכל דבר שאינכם יכולים לבנות מחדש. [5]
לא. אין למה להירשם ואין אישור גישה להדביק: השרת מגיע אל Docker דרך ה-socket המקומי שלחשבון ה-macOS שלכם כבר יש גישה אליו. הוא כן דורש ש-Docker עצמו ירוץ, וזה התנאי היחיד שהעמוד הזה חוזר עליו שוב ושוב, והפקודה uvx מורידה את החבילה ממאגר החבילות הציבורי של PyPI בריצה הראשונה, כך שההפעלה הראשונה צריכה חיבור לאינטרנט. אחריה החבילה שמורה על ה-Mac. [1][5]
כי הוא לא מדווח גרסה משלו. הקוד יוצר את שרת ה-MCP שלו כ-Server("docker-server") בלי ארגומנט גרסה, ולכן ה-SDK נופל אחורה ומדפיס את גרסת החבילה של עצמו, והריצה שלנו קיבלה 1.29.0. החבילה שהתקנו היא mcp-server-docker 0.2.1, שפורסמה בתאריך 2025-06-05. שני המספרים אמיתיים ושניהם נלכדו למעלה. [1][6]
מקורות
כל מה שבעמוד הזה שלא ראינו בעצמנו בריצה מקושר כאן, עם התאריך שבו קראנו אותו. לגבי השאר, הריצה עצמה היא הקבלה.
[1]
Latest version 0.2.1, uploaded 2025-06-05; author Christian Kreiling; requires Python >=3.12 and declares docker>=7.1.0, mcp>=1.1.0,<2.0 and paramiko>=3.5.1,<4.0.
[2]
3,571 downloads in the last week and 12,821 in the last month at access time.
[3]
731 stars, licence reported as GPL-3.0, and a last push dated 2025-06-05 at access time, per the GitHub API.
[4]
The full GNU General Public License version 3. PyPI carries no licence classifier for this package, only the licence text.
[5]
The uvx config shape, the docker_compose prompt, the per-container stats and logs resources, the ssh:// DOCKER_HOST option, and the disclaimers about sensitive data and unsupported privileged options.
[6]
Line 34 creates Server("docker-server") with no version, and run_stdio() uses stdio_server(): the server speaks stdio and declares no version of its own. In __init__.py, docker.from_env() is evaluated before the stdio server starts, which is why an unreachable daemon is a startup crash.
[7]
Docker Inc.'s own MCP surface: a Docker Desktop feature that runs other MCP servers as containers behind one local gateway.
[8]
1,516 stars, MIT licence, and a push dated 2026-07-23 at access time. The open-source CLI plugin behind the MCP Toolkit; its README lists Docker Desktop 4.59 or newer as a prerequisite, and our test Mac runs 4.5.0.
[9]
Docker's public catalogue of MCP servers packaged as images. A request to mcp.docker.com answered 302 to this address at access time.
[10]
The Claude Desktop config file path and the mcpServers command and args shape.
[11]
The claude mcp add [options] <name> -- <command> [args...] syntax for local stdio servers.
[12]
[13]
How Routines runs one-click OAuth connectors and any MCP server.
העמוד הזה מתאר את Docker כפי שהתנהג בריצה מתוארכת אחת על Mac אחד. גרסאות משתנות: אם משהו כאן כבר לא תואם למה שאתם רואים, תאריך הלכידה בראש העמוד אומר בן כמה הצילום.
מאחורי המדריך הזה
Routines, האפליקציה שמאחורי המדריך הזה, מריצה שרתי MCP כמו זה בלי טרמינל: כך עובדים המחברים. הפתקים שלכם נשארים קובצי markdown על ה-Mac שלכם, אין חשבון ענן לשלם, והיא עובדת גם בלי אינטרנט. להורדת Routines