Claude Code

Chạy Claude Code trong dev container: cô lập, đồng nhất, ít hỏi quyền hơn

Tóm tắt

Dev container cho Claude Code một môi trường cô lập, giống nhau cho cả team. Mount volume và đặt CLAUDE_CONFIG_DIR để giữ đăng nhập; chỉ bỏ qua prompt quyền với repo tin cậy, không mount bí mật của máy chủ và giới hạn mạng ra ngoài.

Bạn muốn để Claude Code chạy lâu mà không phải bấm duyệt từng lệnh, nhưng ngại cho nó toàn quyền trên máy thật. Hoặc team cần môi trường giống hệt nhau cho mọi người. Dev container giải quyết cả hai: Claude Code chạy trong một container Docker được định nghĩa sẵn, lệnh nó chạy nằm trong container, còn file dự án bạn sửa vẫn hiện ra ở repo trên máy. Đây là cách phổ biến nhất để chạy Claude Code an toàn hơn ở chế độ ít hỏi quyền.

Thêm Claude Code vào dev container

// .devcontainer/devcontainer.json
{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
  }
}

Rebuild container (VS Code: Dev Containers: Rebuild Container), mở terminal, chạy claude và đăng nhập. Feature tự cài Node.js nếu image chưa có, và cài luôn extension Claude Code khi mở bằng VS Code hoặc Codespaces. Hoạt động với mọi công cụ hỗ trợ chuẩn Dev Containers: VS Code, GitHub Codespaces, JetBrains, Cursor.

Giữ đăng nhập qua các lần rebuild

"mounts": ["source=claude-code-config,target=/home/node/.claude,type=volume"],
"containerEnv": { "CLAUDE_CONFIG_DIR": "/home/node/.claude" }

Thiếu CLAUDE_CONFIG_DIR, file ~/.claude.json nằm ngoài volume và bị xoá khi rebuild, nên lần nào cũng phải thiết lập lại. Muốn tách theo dự án, thêm ${devcontainerId} vào tên volume.

Bốn chủ đề cấu hình chính

Mục tiêuCách làm
Áp chính sách tổ chứcCopy managed-settings.json vào /etc/claude-code/ trong Dockerfile
Ghim phiên bản, tắt tự cập nhậtCài bằng npm install -g @anthropic-ai/[email protected], đặt DISABLE_AUTOUPDATER=1
Giới hạn mạng ra ngoàiScript init-firewall.sh của container mẫu, cần quyền NET_ADMIN, NET_RAW
MCP server cho cả team.mcp.json ở gốc repo, cài binary cần thiết trong Dockerfile

Chạy không hỏi quyền: an toàn tới đâu?

Trong container chạy user không phải root, bạn có thể dùng --dangerously-skip-permissions (CLI từ chối cờ này khi chạy bằng root). Nhưng tài liệu cảnh báo rõ: container không ngăn một dự án độc hại lấy mọi thứ truy cập được bên trong, kể cả credential Claude Code trong ~/.claude. Claude vẫn sửa được mọi file trong workspace được mount (hiện thẳng trên máy bạn) và gọi được mọi địa chỉ mạng mà chính sách cho phép.

  • Chỉ dùng với repo tin cậy, và theo dõi hoạt động của Claude.
  • Không mount ~/.ssh hay file credential cloud từ máy chủ; dùng token ngắn hạn, phạm vi repo.
  • Kết hợp với giới hạn mạng để hạn chế thứ một phiên bypass có thể chạm tới.
  • Muốn ít prompt mà vẫn có kiểm tra an toàn: cân nhắc auto mode thay vì bypass.

Container mẫu

Repo anthropics/claude-code có thư mục .devcontainer/ mẫu gồm devcontainer.json, Dockerfile và init-firewall.sh, kết hợp CLI, tường lửa và volume lưu cấu hình. Đây là ví dụ để tham khảo, không phải image được bảo trì.

Áp dụng thế nào?

  • Dev: Thêm feature Claude Code vào devcontainer sẵn có của dự án; mount volume cấu hình để không phải đăng nhập lại.
  • Tech Lead: Dùng container mẫu làm điểm khởi đầu cho môi trường agent chạy tự động, có tường lửa allowlist.
  • PM/Admin: Chính sách bắt buộc nên phân phối qua server-managed settings hoặc MDM, vì ai có quyền ghi repo cũng sửa được Dockerfile.

Nguồn & tham khảo

  1. Development containers — Claude Code Docs