Claude Code + Docker — разработка в контейнере (Гайд и обучение Claude Code)

Claude Code в контейнере — это не просто удобно, это безопасно. Ты даёшь модели полный доступ к shell, но ограничиваешь его контейнером: ничего не разъедется по системе, ключи .ssh вне досягаемости, rm -rf / максимум почистит контейнер.

Claude Code + Docker — разработка в контейнере (Гайд и обучение Claude Code)

Канал с гайдами и контентом по claude code, выкладываем новости (когда режут лимиты в 10 раз) и какие инструменты через claude реализуем для проектов, канал: https://t.me/claudedevolper

Базовый Dockerfile

FROM node:22-alpine RUN apk add --no-cache git bash curl jq python3 py3-pip RUN npm install -g @anthropic-ai/claude-code WORKDIR /workspace RUN addgroup -g 1000 dev && adduser -D -u 1000 -G dev dev USER dev CMD ["claude"]

Собираем и запускаем:

docker build -t claude-sandbox . docker run -it --rm \ -v $(pwd):/workspace \ -v claude-config:/home/dev/.claude \ claude-sandbox

Volume claude-config сохраняет логин между запусками — не придётся каждый раз логиниться через /login.

Devcontainer для VS Code

Файл .devcontainer/devcontainer.json делает проект одной кнопкой «Reopen in Container» переносимым на любую машину:

{ "name": "Claude Code Dev", "image": "node:22", "features": { "ghcr.io/devcontainers/features/git:1": {}, "ghcr.io/devcontainers/features/github-cli:1": {} }, "postCreateCommand": "npm install -g @anthropic-ai/claude-code", "remoteEnv": { "ANTHROPIC_API_KEY": "${localEnv:ANTHROPIC_API_KEY}" }, "mounts": [ "source=claude-data,target=/home/node/.claude,type=volume" ], "customizations": { "vscode": { "extensions": ["anthropic.claude-code"] } } }

Коллега клонирует репо → «Reopen in Container» → через 30 секунд у него рабочий Claude Code с тем же окружением, что у тебя.

Docker Compose — проект + Claude в одном

services: app: build: . ports: - "3000:3000" volumes: - .:/app environment: - DATABASE_URL=postgres://dev:dev@db/dev db: image: postgres:16 environment: POSTGRES_PASSWORD: dev POSTGRES_USER: dev volumes: - pgdata:/var/lib/postgresql/data claude: image: claude-sandbox volumes: - .:/workspace - claude-data:/home/dev/.claude network_mode: service:app depends_on: - app tty: true stdin_open: true volumes: pgdata: claude-data:

Claude живёт в том же network namespace, что и app — может делать curl http://localhost:3000 без лишних настроек.

Изоляция секретов

Главная выгода — модель физически не может прочитать то, чего нет в контейнере:

docker run -it --rm \ --read-only \ --tmpfs /tmp \ -v $(pwd):/workspace:rw \ --cap-drop ALL \ --security-opt no-new-privileges \ claude-sandbox

  • --read-only — ФС только на чтение, кроме /workspace
  • --cap-drop ALL — никаких привилегий ядра
  • no-new-privileges — запрещает эскалацию через suid

Даже если Claude сгенерит «плохой» curl | bash, ему будет некуда писать.

Подводные камни

  • File watching не всегда работает через bind-mount. На Windows/macOS может быть проблема с inotify. Решение — polling в webpack/vite.
  • Volume claude-data привязан к юзеру. Если в контейнере uid=1000, а на хосте ты uid=501 — будут конфликты прав. Решается --user $(id -u):$(id -g).
  • ANTHROPIC_API_KEY в env светится в docker inspect. На prod используй Docker secrets.

Как попробовать

1. Создай Dockerfile из сниппета выше 2. docker build -t claude-sandbox . 3. Запусти с текущей папкой как volume 4. Внутри выполни /login — один раз 5. Следующие запуски сразу готовы к работе

Канал с гайдами и контентом по claude code, выкладываем новости (когда режут лимиты в 10 раз) и какие инструменты через claude реализуем для проектов, канал: https://t.me/claudedevolper

Claude Code + Docker — разработка в контейнере (Гайд и обучение Claude Code)
1
Начать дискуссию