תיעוד 108
קונטיינרים לפיתוח
הרץ את Claude Code בתוך קונטיינר פיתוח כדי לקבל סביבות עקביות ומבודדות לכל הצוות.
קונטיינר פיתוח, או dev container, מאפשר להגדיר סביבה זהה ומבודדת שכל מהנדס בצוות יכול להריץ. כש-Claude Code מותקן בקונטיינר הזה, פקודות ש-Claude מריץ מתבצעות בתוכו ולא במחשב המארח, בעוד עריכות לקבצי הפרויקט מופיעות במאגר המקומי תוך כדי העבודה.
הדף הזה מכסה התקנת Claude Code בקונטיינר פיתוח, ואחר כך נושאי הגדרה עצמאיים: שמירת אימות בין בניות מחדש, אכיפת מדיניות ארגונית, הגבלת תעבורת רשת יוצאת, והרצה בלי בקשות הרשאה. קרא את הנושאים שמתאימים להגדרה שלך.
[!WARNING]
קונטיינר הפיתוח מספק הגנות משמעותיות, אבל אף מערכת אינה חסינה לחלוטין מכל מתקפה. כשמריצים עם
--dangerously-skip-permissions, קונטיינרי פיתוח אינם מונעים מפרויקט זדוני להוציא כל דבר שנגיש בתוך הקונטיינר, כולל פרטי ההתחברות של Claude Code שנשמרים ב-~/.claude. השתמש בקונטיינרי פיתוח רק כשמפתחים עם מאגרים מהימנים, ועקוב אחרי הפעולות של Claude. הימנע מלחבר לקונטיינר סודות מהמארח כמו~/.sshאו קבצי פרטי גישה לענן. העדף אסימונים ברמת המאגר או אסימונים קצרי חיים.
[accordion] איך קונטיינרי פיתוח עובדים עם העורך
קונטיינר פיתוח רץ כקונטיינר Docker, במחשב שלך או במארח ענן כמו GitHub Codespaces. עורך שתומך במפרט Dev Containers, כמו VS Code, GitHub Codespaces, סביבת JetBrains או Cursor, מתחבר לקונטיינר הזה: אתה מעיין ועורך קבצים בעורך כרגיל, אבל הטרמינל המשולב, שרתי השפה וכלי הבנייה רצים כולם בתוך הקונטיינר ולא במארח. עורכים בלי תמיכה בקונטיינר פיתוח, כמו Vim רגיל, אינם חלק מתהליך העבודה הזה.
Claude Code רץ בתוך הקונטיינר, ולכן הוא רואה את אותם קבצים, תלויות וכלים כמו שאר שרשרת הכלים של הפרויקט. ב-VS Code אפשר להשתמש בלוח ההרחבה של Claude Code או להריץ
claudeבטרמינל המשולב. שניהם רצים בתוך הקונטיינר וחולקים את אותה הגדרת~/.claude.
#הוספת Claude Code לקונטיינר הפיתוח
Claude Code מותקן בכל קונטיינר פיתוח דרך Claude Code Dev Container Feature.
ההגדרות עובדות עם כל כלי שתומך במפרט Dev Containers, כמו VS Code, GitHub Codespaces או סביבות JetBrains. השלבים למטה משתמשים ב-VS Code כדוגמה.
כשפותחים את הקונטיינר ב-VS Code או ב-Codespaces, התכונה מוסיפה גם את הרחבת VS Code של Claude Code. עורכים אחרים מתעלמים מהחלק הזה.
[!TIP]
חדש בקונטיינרי פיתוח? מדריך VS Code Dev Containers עובר על התקנת Docker, ההרחבה ופתיחת הקונטיינר הראשון. לדוגמה מלאה ומחוזקת יותר עם חומת אש ואמצעי אחסון קבועים, ראה נסה את קונטיינר הייחוס.
1. יצירה או עדכון של devcontainer.json
שמור את הקטע הבא כ-.devcontainer/devcontainer.json במאגר, או הוסף את בלוק features לקובץ הקיים.
תג הגרסה בסוף, כמו :1.0, מקבע את סקריפט ההתקנה של התכונה, לא את מהדורת Claude Code. התכונה מתקינה את Claude Code העדכני, ו-Claude Code מעדכן את עצמו בתוך הקונטיינר כברירת מחדל.
כדי לקבע גרסת CLI או לבטל עדכון אוטומטי, ראה אכיפת מדיניות ארגונית.
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
}
}החלף את שורת image בתמונת הבסיס של הפרויקט, או הסר אותה אם הקובץ הקיים משתמש ב-Dockerfile.
תכונת Claude Code מתקינה את Node.js בעצמה כשתמונת הבסיס לא מספקת אותו. אם ההתקנה נכשלת והבנייה נעצרת עם Failed to install Node.js and npm, הוסף "ghcr.io/devcontainers/features/node:1": {} לבלוק features מעל תכונת Claude Code ובנה מחדש.
2. בנייה מחדש של הקונטיינר
פתח את לוח הפקודות של VS Code עם Cmd+Shift+P ב-Mac או Ctrl+Shift+P ב-Windows וב-Linux, והרץ Dev Containers: Rebuild Container.
בכלים אחרים, פעל לפי פעולת הבנייה מחדש של אותו כלי: ראה בנייה מחדש ב-GitHub Codespaces, את Dev Containers CLI, או את תיעוד קונטיינר הפיתוח של סביבת הפיתוח.
3. התחברות ל-Claude Code
פתח טרמינל בקונטיינר שנבנה מחדש והרץ claude, ואז עקוב אחרי בקשת האימות.
מה שמופיע בבקשת האימות תלוי בספק:
- Anthropic: התחבר דרך דפדפן עם חשבון Claude או Anthropic Console
- Amazon Bedrock, Google Cloud's Agent Platform, או Microsoft Foundry: Claude Code משתמש בפרטי הגישה של ספק הענן, בלי בקשת דפדפן
עבור ספקי ענן, העבר פרטי גישה לקונטיינר כמשתני סביבה דרך containerEnv, סוד של Codespaces, או זהות עומס העבודה של הענן, במקום לחבר קבצי פרטי גישה מהמארח. ראה Amazon Bedrock, Google Cloud's Agent Platform, או Microsoft Foundry לשרשרת פרטי הגישה ש-Claude Code קורא.
ראה בחירת ספק ה-API כדי להחליט איזה מסלול מתאים לארגון.
[!NOTE]
להתחברות Anthropic: אם לא נפתח דפדפן, או שהוא מחבר אותך ואז מציג שגיאת חיבור ל-
localhost, השתמש בכתובת ההתחברות שמוצגת מעל בקשת ההדבקה בטרמינל. העתק אותה לדפדפן, התחבר שם, ואז הדבק את הקוד שהדפדפן מציג בבקשה הזו. אם ההדבקה לא עושה כלום, ראה התחברות OAuth נכשלת ב-WSL2, ב-SSH או בקונטיינרים.
#שמירת אימות והגדרות בין בניות מחדש
כברירת מחדל, תיקיית הבית של הקונטיינר נמחקת בבנייה מחדש, ולכן מהנדסים צריכים להתחבר שוב בכל פעם. Claude Code שומר את אסימון האימות, הגדרות המשתמש והיסטוריית הסשנים תחת התיקייה ~/.claude. הוא שומר את פרטי החשבון, שרתי MCP אישיים ואמון לכל פרויקט בקובץ נפרד מחוץ לתיקייה הזו: ~/.claude.json.
כדי לשמור את התיקייה ואת הקובץ, חבר volume בשם אל ~/.claude והגדר את CLAUDE_CONFIG_DIR לאותו נתיב, כדי ש-Claude Code יכתוב את .claude.json בתוך ה-volume. הדוגמה הבאה מחברת את ה-volume ומגדירה את CLAUDE_CONFIG_DIR לקונטיינר ש-remoteUser שלו הוא node:
"mounts": [
"source=claude-code-config,target=/home/node/.claude,type=volume"
],
"containerEnv": {
"CLAUDE_CONFIG_DIR": "/home/node/.claude"
}החלף את /home/node בתיקיית הבית של remoteUser בקונטיינר. אם כבר הגדרת containerEnv, למשל באכיפת מדיניות ארגונית, הוסף את CLAUDE_CONFIG_DIR לאובייקט הזה במקום להוסיף אובייקט שני.
[!NOTE]
אם Claude Code חוזר על הגדרת ההפעלה הראשונה אחרי כל בנייה מחדש למרות ה-volume המחובר, בדוק ש-
containerEnvב-devcontainer.jsonמגדיר אתCLAUDE_CONFIG_DIRלנתיב החיבור של ה-volume. בליCLAUDE_CONFIG_DIR,~/.claude.jsonנשאר בתיקיית הבית ונמחק בבנייה מחדש, יחד עם הרשומה שההגדרה הושלמה.
כדי לבודד מצב לכל פרויקט במקום לשתף volume אחד בין כל המאגרים, כלול את המשתנה ${devcontainerId} בשם המקור. הגדרת הייחוס משתמשת ב-source=claude-code-config-${devcontainerId} למטרה הזו.
ב-GitHub Codespaces, ~/.claude נשמר כשעוצרים ומפעילים codespace, אבל נמחק כשבונים מחדש את הקונטיינר, ולכן ההגדרה למעלה חלה גם שם.
כדי להעביר אימות בין codespaces, שמור את ANTHROPIC_API_KEY או CLAUDE_CODE_OAUTH_TOKEN מ-claude setup-token כסוד Codespaces. Codespaces חושף סודות כמשתני סביבה בתוך הקונטיינר באופן אוטומטי.
#אכיפת מדיניות ארגונית
קונטיינר פיתוח הוא מקום נוח להחיל מדיניות ארגונית, כי אותה תמונה ואותה הגדרה רצות במחשב של כל מהנדס.
Claude Code קורא את /etc/claude-code/managed-settings.json ב-Linux ומחיל אותו בעדיפות הגבוהה ביותר בהיררכיית ההגדרות, ולכן ערכים שם גוברים על כל מה שמהנדס מגדיר ב-~/.claude או בתיקיית .claude/ של הפרויקט. העתק את הקובץ למקום מתוך ה-Dockerfile:
RUN mkdir -p /etc/claude-code
COPY managed-settings.json /etc/claude-code/managed-settings.jsonמכיוון שה-Dockerfile נמצא במאגר, כל מי שיש לו הרשאת כתיבה יכול לשנות או להסיר את השלב הזה. למדיניות שמהנדסים לא יכולים לעקוף על ידי עריכת קבצי המאגר, העבר הגדרות מנוהלות דרך הגדרות מנוהלות בשרת או דרך ה-MDM. ראה קבצי הגדרות מנוהלות למפתחות הזמינים ולמסלולי ההעברה האחרים.
כדי להגדיר משתני סביבה שחלים על כל סשן של Claude Code בקונטיינר, הוסף אותם ל-containerEnv ב-devcontainer.json. הדוגמה הבאה מבטלת טלמטריה ודיווח שגיאות ומונעת מ-Claude Code לעדכן את עצמו אוטומטית אחרי ההתקנה:
"containerEnv": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"DISABLE_AUTOUPDATER": "1"
}CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC מבטל גם את הערכת דגלי התכונות שRemote Control ושאר התכונות שדורשות שליפת דגלי תכונות תלויות בה, ולכן סשנים בקונטיינר לא יכולים להשתמש בהן.
תכונת Dev Container תמיד מתקינה את מהדורת Claude Code העדכנית. כדי לקבע גרסת Claude Code מסוימת לבניות שניתן לשחזר, התקן אותה מתוך ה-Dockerfile עם npm install -g @anthropic-ai/[email protected] במקום להשתמש בתכונה, והגדר את DISABLE_AUTOUPDATER ל-1 ב-containerEnv.
לרשימה המלאה של בקרות מדיניות, כולל כללי הרשאות, הגבלות כלים ורשימות היתר של שרתי MCP, ראה הגדרת Claude Code לארגון.
כדי להפוך שרתי MCP לזמינים בתוך הקונטיינר, הגדר אותם בהיקף הפרויקט בקובץ .mcp.json בשורש המאגר, כדי שהם ייכנסו לניהול גרסאות יחד עם הגדרת קונטיינר הפיתוח. התקן ב-Dockerfile כל קובץ בינארי ששרתי stdio מקומיים תלויים בו, והוסף דומיינים של שרתים מרוחקים לרשימת ההיתר של הרשת.
#הגבלת תעבורת רשת יוצאת
אפשר להגביל את התעבורה היוצאת של הקונטיינר רק לדומיינים ש-Claude Code צריך. ראה דרישות גישה לרשת לדומיינים של הסקה ואימות, ושירותי טלמטריה לחיבורים האופציונליים של טלמטריה ודיווח שגיאות ולאופן הביטול שלהם.
קונטיינר הייחוס כולל סקריפט init-firewall.sh שמגביל תעבורה יוצאת ליעדים שהסקריפט מתיר. הרצת חומת אש בתוך קונטיינר דורשת הרשאות נוספות, ולכן הייחוס מוסיף את היכולות NET_ADMIN ו-NET_RAW דרך runArgs. סקריפט חומת האש והיכולות האלה אינם נדרשים ל-Claude Code עצמו: אפשר להשמיט אותם ולהסתמך על בקרות הרשת שלך.
#הרצה בלי בקשות הרשאה
מכיוון שהקונטיינר מריץ את Claude Code כמשתמש שאינו root ומגביל את ביצוע הפקודות לקונטיינר, אפשר להעביר --dangerously-skip-permissions להפעלה ללא השגחה. ה-CLI דוחה את הדגל הזה כשמפעילים אותו כ-root, אז ודא ש-remoteUser מוגדר לחשבון שאינו root.
דילוג על בקשות הרשאה מסיר את האפשרות לבדוק קריאות כלים לפני שהן רצות. Claude עדיין יכול לשנות כל קובץ בסביבת העבודה שמחוברת ב-bind mount, והשינוי מופיע ישירות במארח, ולהגיע לכל דבר שמדיניות הרשת של הקונטיינר מתירה. שלב את הדגל הזה עם הגבלות תעבורת הרשת היוצאת למעלה כדי להגביל לאן סשן שעקף הרשאות יכול להגיע.
אם רוצים פחות בקשות בלי לבטל בדיקות בטיחות, שקול מצב אוטומטי, שבו מסווג בודק פעולות לפני שהן רצות. כדי למנוע ממהנדסים להשתמש ב---dangerously-skip-permissions בכלל, הגדר את permissions.disableBypassPermissionsMode ל-"disable" בהגדרות מנוהלות.
#ניסיון קונטיינר הייחוס
מאגר anthropics/claude-code כולל קונטיינר פיתוח לדוגמה שמשלב את ה-CLI, חומת אש לתעבורה יוצאת, אמצעי אחסון קבועים ומעטפת מבוססת Zsh. הוא מסופק כדוגמה עובדת ולא כתמונת בסיס מתוחזקת. השתמש בו כדי לראות איך החלקים משתלבים לפני שמחילים אותם על ההגדרה שלך.
1. התקנת דרישות מוקדמות
התקן את VS Code ואת הרחבת Dev Containers.
2. שכפול הייחוס
שכפל את מאגר Claude Code ופתח אותו ב-VS Code.
3. פתיחה מחדש בקונטיינר
כשמופיעה בקשה, לחץ על Reopen in Container, או הרץ Dev Containers: Reopen in Container מלוח הפקודות.
4. הפעלת Claude Code
אחרי שהקונטיינר מסיים להיבנות, פתח טרמינל עם Ctrl+` והרץ claude כדי להתחבר ולהתחיל את הסשן הראשון.
כדי להשתמש בהגדרה הזו עם הפרויקט שלך, העתק את תיקיית .devcontainer/ למאגר והתאם את ה-Dockerfile לשרשרת הכלים, או חזור להוספת Claude Code לקונטיינר הפיתוח כדי להוסיף רק את התכונה להגדרה שכבר קיימת.
הגדרת הייחוס מורכבת משלושה קבצים. אף אחד מהם אינו נדרש כשמוסיפים את Claude Code לקונטיינר הפיתוח שלך דרך התכונה, אבל הם מראים דרך אחת לשלב את החלקים.
| קובץ | מטרה |
|---|---|
devcontainer.json | חיבורי volume, יכולות runArgs, הרחבות VS Code ו-containerEnv |
Dockerfile | תמונת בסיס, כלי פיתוח והתקנת Claude Code |
init-firewall.sh | מגביל תעבורת רשת יוצאת ליעדים שהסקריפט מתיר |
#השלבים הבאים
אחרי ש Claude Code רץ ב dev container שלך, הדפים שלמטה מכסים את שאר הפריסה הארגונית: בחירת נתיב אימות, מסירת מדיניות מנוהלת מחוץ למאגר, מעקב אחרי שימוש, והבנה של מה Claude Code שומר ושולח.
- הגדרת Claude Code לארגון שלך: בחירת ספק אימות, החלטה איך המדיניות מגיעה למכשירים, ותכנון הפריסה
- הגדרות מנוהלות בשרת: מסירת מדיניות מנוהלת מקונסולת הניהול של
claude.ai, כדי שמהנדסים לא יוכלו לעקוף אותה באמצעות עריכת קבצי המאגר - מעקב אחרי שימוש וביקורת פעילות: ייצוא מדדי
OpenTelemetryובדיקה של מה שהצוות מריץ - דרישות גישה לרשת: רשימת הדומיינים המלאה המותרת עבור פרוקסי וחומות אש
- שירותי טלמטריה וביטול הסכמה: מה
Claude Codeשולח כברירת מחדל, ומשתני הסביבה שמבטלים את זה - חקירת ספריית
.claude: מה הvolume mountמכיל, כולל פרטי הזדהות, הגדרות והיסטוריית הפעלות - סביבות sandbox: השוואה בין
dev containersלבין הsandboxהמובנה שלBash, קונטיינרים מותאמים אישית וVMs - מודל האבטחה: איך מערכת ההרשאות של
Claude Code, הsandboxingוההגנות מפניprompt injectionמשתלבים יחד - מצבי הרשאה: הטווח המלא ממצב
planלמצבautoועדbypass, ומתי להשתמש בכל אחד