Статьи

3 проблемы при первом запуске Claude Code в Docker-контейнере

Новый экземпляр Claude Code останавливается на трех этапах: онбординг, доверие к директории и подтверждение API-ключа. В автоматическом режиме их необходимо заранее записать в ~/.claude.json.

Агент, выводящий баннер и ожидающий ввода, генерирует байты, создавая иллюзию активности в логах. В новом контейнере Claude Code останавливается трижды.

Three gates in a row. An agent passes the first two and stops at the third.onboardingtrustapi keya fresh container
Порядок строгий. Прохождение первых двух шагов не спасает от остановки на третьем.

Три барьера в хронологическом порядке

ШагЗапрос
Мастер первого запускаВыбор цветовой темы
Проверка доверия к директорииДоверяете ли вы этой папке проекта?
Подтверждение API-ключаХотите ли вы использовать данный API-ключ?

Частичная настройка оставляет процесс заблокированным на следующем этапе.

Таблица практических измерений

Замеры для claude 2.1.220 в чистом HOME-окружении:

Внесенная конфигурацияПоведение агента
Без конфигурацииБлокировка на выборе темы
Только theme в settings.jsonВсе еще блокировка на выборе темы
hasCompletedOnboarding в .claude.jsonПереход к диалогу доверия
+ hasTrustDialogAccepted для канонического путиВыход в командную строку ("Not logged in")
+ ANTHROPIC_API_KEY в окруженииБлокировка на подтверждении ключа
+ customApiKeyResponses.approvedПолная готовность к работе

Ловушка канонических путей

Пути в ~/.claude.json должны быть строго каноническими, без символических ссылок.

export function trustKeyFor(root: string): string {
  try {
    return realpathSync(root);
  } catch {
    return root;
  }
}

Подтверждение ключа

По умолчанию диалог ключа выбирает 2. No (recommended). CLI сохраняет последние 20 символов как токен одобрения.

export function approvalTokenFor(apiKey: string): string {
  return apiKey.slice(-20);
}

Неработающие решения

Флаг --permission-mode bypassPermissions не отключает проверку доверия к директории.

Тема — это оформление. Удаление файла — ответственное решение.

Мы автоматизируем старт окружения, но сохраняем защиту на потенциально опасных операциях.

const trust: ProjectTrust = {
  hasTrustDialogAccepted: true,
  hasCompletedProjectOnboarding: true,
  projectOnboardingSeenCount: 0,
  allowedTools: [],
};

О запуске в облачной среде читайте в запуск Claude Code в облаке, а о контроле соединений — в наблюдение за удаленным терминалом.

Прямые ответы

Почему Claude Code зависает при первом старте в контейнере?

Он ожидает интерактивных ответов по выбору темы, доверию к папке и подтверждению ключа API.

Как запускать Claude Code неинтерактивно?

Записав параметры онбординга и доверия в ~/.claude.json до старта и передав ключ через переменные окружения.

Как проводились замеры?

На реальных PTY с версией Claude Code 2.1.220 путем анализа генерируемых файлов конфигурации.