Một development container (dev container) cho phép định nghĩa một môi trường giống hệt nhau, cô lập mà mọi kỹ sư trong team đều chạy được. Với Claude Code cài trong container đó, các lệnh Claude chạy thực thi bên trong container thay vì trên máy host, trong khi các thay đổi file project vẫn phản ánh vào repository local của bạn.
Trang này gồm hai phần: cài Claude Code vào dev container, sau đó là các chủ đề cấu hình độc lập: lưu xác thực qua các lần rebuild, áp chính sách tổ chức, giới hạn network egress, và chạy không cần permission prompt.
Cách dev container hoạt động với editor
Phần tiêu đề “Cách dev container hoạt động với editor”Dev container chạy như một container Docker, trên máy bạn hoặc trên cloud host như GitHub Codespaces. Một editor hỗ trợ chuẩn Dev Containers (VS Code, GitHub Codespaces, JetBrains IDE, Cursor) kết nối tới container đó: bạn duyệt và sửa file trong editor như bình thường, nhưng terminal tích hợp, language server, và build tool đều chạy trong container thay vì trên host. Editor không hỗ trợ dev container (như Vim thuần) không nằm trong workflow này.
Claude Code chạy trong container, nên nó thấy cùng file, dependency, và tool như phần còn lại của toolchain project. Trong VS Code bạn có thể dùng panel extension Claude Code hoặc chạy claude trong terminal tích hợp; cả hai đều chạy trong container và dùng chung cấu hình ~/.claude.
Thêm Claude Code vào dev container
Phần tiêu đề “Thêm Claude Code vào dev container”Claude Code cài vào bất kỳ dev container nào qua Claude Code Dev Container Feature.
-
Tạo hoặc cập nhật
devcontainer.json: lưu như.devcontainer/devcontainer.jsontrong repository, hoặc thêm blockfeaturesvào file hiện có.Tag phiên bản cuối cùng (như
:1.0) pin script cài đặt của feature, không pin bản Claude Code - feature luôn cài Claude Code mới nhất, và Claude Code tự auto-update trong container theo mặc định..devcontainer/devcontainer.json {"image": "mcr.microsoft.com/devcontainers/base:ubuntu","features": {"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}}}Thay dòng
imagebằng base image project của bạn, hoặc bỏ nếu file hiện có dùng Dockerfile.Feature Claude Code tự cài Node.js nếu base image chưa có. Nếu build lỗi
Failed to install Node.js and npm, thêm"ghcr.io/devcontainers/features/node:1": {}vào blockfeaturestrước feature Claude Code và rebuild. -
Rebuild container: mở Command Palette (
Cmd+Shift+Ptrên Mac,Ctrl+Shift+Ptrên Windows/Linux) và chạy Dev Containers: Rebuild Container. Với tool khác, dùng hành động rebuild tương ứng của tool đó. -
Đăng nhập Claude Code: mở terminal trong container đã rebuild, chạy
claude, làm theo prompt xác thực.
Prompt xác thực tùy thuộc provider:
- Anthropic: đăng nhập qua trình duyệt với tài khoản Claude hoặc Anthropic Console.
- Amazon Bedrock, Google Cloud’s Agent Platform, hoặc Microsoft Foundry: Claude Code dùng credential cloud provider, không hiện prompt trình duyệt.
Với cloud provider, truyền credential vào container qua biến môi trường (containerEnv, secret Codespaces, hoặc workload identity của cloud) thay vì mount file credential từ host.
Lưu xác thực và settings qua các lần rebuild
Phần tiêu đề “Lưu xác thực và settings qua các lần rebuild”Mặc định, thư mục home của container bị xóa khi rebuild, nên kỹ sư phải đăng nhập lại mỗi lần. Claude Code lưu token xác thực, user settings, và lịch sử session dưới thư mục ~/.claude. Nó lưu tài khoản OAuth, MCP server cá nhân, và trust theo project trong ~/.claude.json - một file riêng ngoài thư mục đó - nên chỉ mount volume ở ~/.claude không giữ được đăng nhập. Mount một named volume vào ~/.claude và đặt CLAUDE_CONFIG_DIR cùng đường dẫn đó để Claude Code ghi .claude.json vào trong volume.
"mounts": [ "source=claude-code-config,target=/home/node/.claude,type=volume"],"containerEnv": { "CLAUDE_CONFIG_DIR": "/home/node/.claude"}Thay /home/node bằng home directory của remoteUser trong container bạn. Để cô lập state theo từng project thay vì dùng chung một volume cho mọi repository, thêm biến ${devcontainerId} vào tên source.
Trong GitHub Codespaces, ~/.claude giữ nguyên khi stop/start codespace nhưng bị xóa khi rebuild container, nên cấu hình trên vẫn cần áp dụng ở đó.
Để mang xác thực qua nhiều codespace, lưu ANTHROPIC_API_KEY hoặc CLAUDE_CODE_OAUTH_TOKEN (từ claude setup-token) như một Codespaces secret.
Áp chính sách tổ chức
Phần tiêu đề “Áp chính sách tổ chức”Dev container là nơi thuận tiện để áp chính sách tổ chức, vì cùng image và cấu hình chạy trên máy mọi kỹ sư.
Claude Code đọc /etc/claude-code/managed-settings.json trên Linux và áp dụng ở độ ưu tiên cao nhất trong hệ thống settings, nên giá trị ở đó ghi đè bất cứ gì kỹ sư đặt ở ~/.claude hoặc thư mục .claude/ của project. Copy file này từ Dockerfile:
RUN mkdir -p /etc/claude-codeCOPY managed-settings.json /etc/claude-code/managed-settings.jsonVì Dockerfile nằm trong repository, ai có quyền ghi cũng có thể đổi hoặc xóa bước này. Với chính sách mà kỹ sư không thể bỏ qua bằng cách sửa file repository, đưa managed settings qua server-managed settings hoặc MDM thay vào đó.
Để đặt biến môi trường áp dụng cho mọi session Claude Code trong container, thêm vào containerEnv trong devcontainer.json. Ví dụ dưới đây tắt telemetry và error reporting, và ngăn Claude Code tự auto-update sau khi cài:
"containerEnv": { "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1", "DISABLE_AUTOUPDATER": "1"}Dev Container Feature luôn cài bản Claude Code mới nhất. Để pin một phiên bản cụ thể cho build tái lập được, cài từ Dockerfile bằng npm install -g @anthropic-ai/claude-code@X.Y.Z thay vì dùng feature, và đặt DISABLE_AUTOUPDATER như trên.
Để MCP server khả dụng trong container, định nghĩa chúng ở project scope trong file .mcp.json tại root repository để được checkin cùng cấu hình dev container. Cài mọi binary mà local stdio server phụ thuộc trong Dockerfile, và thêm domain của remote server vào network allowlist.
Giới hạn network egress
Phần tiêu đề “Giới hạn network egress”Bạn có thể giới hạn traffic ra ngoài của container chỉ tới các domain Claude Code cần. Xem Yêu cầu truy cập mạng cho danh sách domain inference và xác thực.
Container tham chiếu của Anthropic có script init-firewall.sh chặn mọi traffic ra ngoài trừ các domain Claude Code và dev tool cần. Chạy firewall trong container cần thêm quyền, nên bản tham chiếu thêm capability NET_ADMIN và NET_RAW qua runArgs. Script firewall và các capability này không bắt buộc với bản thân Claude Code - bạn có thể bỏ qua và dùng kiểm soát mạng riêng.
Chạy không cần permission prompt
Phần tiêu đề “Chạy không cần permission prompt”Vì container chạy Claude Code với user không phải root và giới hạn thực thi lệnh trong container, bạn có thể truyền --dangerously-skip-permissions để chạy không giám sát. CLI từ chối flag này khi chạy với root, nên xác nhận remoteUser là tài khoản không phải root.
Bỏ qua permission prompt nghĩa là bạn mất cơ hội xem lại tool call trước khi chạy. Claude vẫn có thể sửa mọi file trong workspace bind-mount (xuất hiện trực tiếp trên host của bạn) và chạm tới bất cứ gì chính sách mạng của container cho phép. Kết hợp flag này với giới hạn network egress ở trên để hạn chế phạm vi ảnh hưởng của một session bị bypass.
Nếu muốn ít prompt hơn mà không tắt kiểm tra an toàn, cân nhắc auto mode thay thế - có một classifier xem xét hành động trước khi chạy. Để ngăn kỹ sư dùng --dangerously-skip-permissions hoàn toàn, đặt permissions.disableBypassPermissionsMode thành "disable" trong managed settings.
Container tham chiếu
Phần tiêu đề “Container tham chiếu”Repository anthropics/claude-code có một dev container mẫu kết hợp CLI, firewall egress, volume bền vững, và shell Zsh. Đây là ví dụ hoạt động chứ không phải base image được duy trì liên tục - dùng để xem các phần khớp với nhau ra sao trước khi áp vào cấu hình của bạn.
Ba file chính trong cấu hình tham chiếu:
| File | Mục đích |
|---|---|
devcontainer.json | Volume mount, capability runArgs, extension VS Code, và containerEnv |
Dockerfile | Base image, dev tool, và cài Claude Code |
init-firewall.sh | Chặn mọi traffic ra ngoài trừ domain được phép |
Bước tiếp theo
Phần tiêu đề “Bước tiếp theo”- Bảo mật: cách hệ thống permission, sandbox, và chống prompt injection của Claude Code kết hợp với nhau.
- Server-managed settings: đưa chính sách quản lý từ Claude.ai admin console để kỹ sư không thể bỏ qua bằng cách sửa file repository.
- Giám sát usage: export metric OpenTelemetry và xem lại team đang chạy gì.
lượt xem