콘텐츠로 이동

문제 해결

”Conflict. The container name is already in use”

섹션 제목: “”Conflict. The container name is already in use””
Terminal window
docker rm -f devcontainer
docker compose up -d

이미지가 오래되었을 수 있습니다. 최신 이미지를 가져온 후 재시작하세요:

Terminal window
docker compose pull
docker compose up -d

엔트리포인트는 온보딩 플래그와 함께 ~/.claude.json을 시드합니다. 누락된 경우:

Terminal window
echo '{"hasCompletedOnboarding": true}' > ~/.claude.json

실제로 설정된 값을 확인하세요:

Terminal window
echo "$ANTHROPIC_API_KEY"

일반적인 원인:

  • LiteLLM 프록시 키 누락 또는 유효하지 않음 — 프록시 모드를 사용하는 경우, .envLITELLM_API_KEY에 올바른 프록시 자격 증명이 포함되어 있는지 확인한 다음 컨테이너를 재시작하여 엔트리포인트가 ANTHROPIC_API_KEY를 파생할 수 있도록 하세요.
  • OAuth 토큰 또는 프록시 모드 불일치 — 인증 모드를 하나만 사용하세요. CLAUDE_CODE_OAUTH_TOKEN이 설정된 경우, LiteLLM 프록시 모드보다 우선합니다.

API 키가 올바르게 설정되어 있는지 확인하세요:

Terminal window
echo "$ANTHROPIC_API_KEY"

공급자에게 직접 호출하여 작동 여부를 확인하세요.

모델은 공급자와 API 키에 의해 결정됩니다. 사용 가능한 모델에 대해서는 공급자의 문서를 확인하세요.

gh CLI에는 GH_TOKEN 환경 변수가 필요합니다. .env 파일에 추가하세요:

GH_TOKEN=ghp_your-token-here

github.com/settings/tokens에서 토큰을 생성하세요. 세분화된 토큰(권장) 또는 repo 범위가 있는 클래식 토큰 모두 사용할 수 있습니다. .env를 업데이트한 후 컨테이너를 재시작하세요.

GH_TOKEN이 설정되면, 엔트리포인트는 gh auth setup-git을 실행하여 HTTPS용 git 자격 증명 도우미를 구성합니다. HTTPS 작업이 실패하는 경우:

  1. 토큰이 유효한지 확인: gh auth status
  2. 자격 증명 도우미가 구성되었는지 확인: git config --global credential.helper
  3. 컨테이너를 재시작하여 엔트리포인트를 다시 실행

두 인증 방법 모두 컨테이너에서 공존할 수 있습니다:

  • SSH (.envSSH_PRIVATE_KEY) — git@github.com: URL을 사용합니다. 조직에서 SSH를 강제하는 경우 필요합니다.
  • HTTPS (.envGH_TOKEN) — https://github.com/ URL을 사용합니다. 설정이 간단하며 키 관리가 필요 없습니다.

두 가지 모두 구성된 경우, git은 원격 URL과 일치하는 프로토콜을 사용합니다. 기존 클론을 전환하려면:

Terminal window
# SSH에서 HTTPS로
git remote set-url origin https://github.com/owner/repo.git
# HTTPS에서 SSH로
git remote set-url origin git@github.com:owner/repo.git

/workspace 또는 /home에서 “Permission denied”

섹션 제목: “/workspace 또는 /home에서 “Permission denied””
Terminal window
sudo chown -R $(id -u):$(id -g) /workspace ~

엔트리포인트는 ~/.npm-global에 사용자 쓰기 가능한 npm 글로벌 접두사를 자동으로 구성하므로, 런타임 npm install -g 명령이 sudo 없이 작동해야 합니다. 여전히 EACCES 오류가 발생하면, 수동으로 수정을 다시 적용하세요:

Terminal window
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
export PATH="$HOME/.npm-global/bin:$PATH"

첫 번째 빌드는 베이스 이미지(~1 GB)를 다운로드합니다. 이후 빌드는 캐시를 사용합니다. 매번 느린 경우:

Terminal window
docker builder prune
Terminal window
docker system prune -a --volumes

경고: 이 명령은 이 프로젝트의 것뿐만 아니라 사용되지 않는 모든 컨테이너, 이미지, 볼륨을 제거합니다.

컨테이너 내부에서 인터넷에 접근할 수 없음

섹션 제목: “컨테이너 내부에서 인터넷에 접근할 수 없음”
Terminal window
ping -c 1 8.8.8.8
nslookup google.com
curl -I https://github.com

DNS가 실패하면, 호스트의 /etc/docker/daemon.json에 추가하세요:

{
"dns": ["8.8.8.8", "8.8.4.4"]
}

그런 다음 Docker를 재시작하세요.

Xvfb가 시작되지 않았을 수 있습니다. 컨테이너 내부에서 확인하세요:

Terminal window
ps aux | grep Xvfb

실행 중이 아닌 경우, ENABLE_VNCfalse로 설정되지 않았는지 확인하고 컨테이너를 재시작하세요.

”Cannot open display” 또는 “No display” 오류

섹션 제목: “”Cannot open display” 또는 “No display” 오류”

DISPLAY 환경 변수가 설정되지 않았을 수 있습니다. 확인하세요:

Terminal window
echo "$DISPLAY"

:99여야 합니다. 비어 있는 경우, .env 또는 devcontainer.jsonDISPLAY=:99를 추가하고 재시작하세요.

noVNC가 실행 중이 아닐 수 있습니다. 컨테이너 내부에서 확인하세요:

Terminal window
ps aux | grep -E 'novnc|websockify'

실행 중이 아닌 경우, ENABLE_VNCtrue(기본값)인지 확인하고 컨테이너 로그를 확인하세요:

Terminal window
docker compose logs dev | grep -i vnc

docker-compose.yml에서 호스트 포트를 변경하세요:

ports:
- "127.0.0.1:16080:6080"

Chrome 원격 디버깅이 응답하지 않음

섹션 제목: “Chrome 원격 디버깅이 응답하지 않음”

공유 Chrome 인스턴스는 포트 9222에서 실행되어야 합니다. 컨테이너 내부에서 확인하세요:

Terminal window
# Chrome이 실행 중인가?
curl http://localhost:9222/json/version
# Chrome 로그 확인
cat ~/.local/share/chrome-browser/chrome.log
# 심볼릭 링크 확인
ls -la /opt/google/chrome/chrome
# Chrome 수동 재시작
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

심볼릭 링크가 누락된 경우, 최신 이미지를 가져온 후 컨테이너를 재시작하세요.

공유 브라우저 아키텍처에서는 프로필 잠금 오류가 발생하지 않아야 합니다. 발생하는 경우, 오래된 Chrome 프로세스가 잠금을 유지하고 있을 수 있습니다:

Terminal window
# 오래된 Chrome 프로세스 종료
pkill -f 'chrome.*remote-debugging-port' || true
# 잠금 파일 제거
rm -f ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock
# Chrome 재시작
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

chrome-devtools-mcp 서버는 현재 ~/.claude/settings.json에 전역적으로 등록되어 있습니다. 리포지토리별 .mcp.json에도 등록되어 있으면 도구가 중복됩니다. 리포지토리별 .mcp.json 파일에서 chrome-devtools-mcp 항목을 제거하세요:

Terminal window
# 리포지토리별 설정 확인
cat .mcp.json

전역 등록을 사용하려면 리포지토리별 .mcp.json에서 chrome-devtools-mcp 키를 제거하세요.

Terminal window
docker compose down -v
docker rm -f devcontainer 2>/dev/null
docker compose pull
docker compose up -d

이 명령은 볼륨의 모든 데이터를 삭제합니다. 리포지토리를 다시 클론하고 도구를 재구성해야 합니다.