Coder
Secure environments for developers and their agents
Tutorials
- Coder:HowToUse - 기본 접속 방법에 대한 설명
Install
Docker
## 1. 공식 compose 예제 다운로드 / Download the official compose example
curl -fLo compose.yaml https://raw.githubusercontent.com/coder/coder/main/compose.yaml
## 2. docker 그룹 GID 확인 (아래 group_add 값에 사용) / Get docker group GID
getent group docker | cut -d: -f3
## 3. Coder 기동 / Start Coder
docker compose up -d
## 4. 로그 확인 (access URL 확인용) / Check logs for the access URL
docker compose logs -f coder
외부에서 도달 가능한 IP 또는 Domain 을 CODER_ACCESS_URL 환경변수로 설정해야 한다.
클라이언트 로그인
## 클라이언트 설치
curl -fsSL https://coder.com/install.sh | sh
## `coder` 커맨드 사용 가능
coder login https://coder.run # 브라우저가 열리고 세션 토큰 발급 / opens browser for session token
SSH 접속 방법
워크스페이스 생성 후:
Docker 템플릿에 GPU 연결하기
템플릿을 수정하면 된다:
kreuzwerker/docker 를 사용하고 있으니, docker_container에 gpus 인자가 그대로 있습니다. docker run --gpus all과 동일하게 DeviceRequests로 변환됩니다.
resource "docker_container" "workspace" {
count = data.coder_workspace.me.start_count
image = docker_image.main.image_id
name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
gpus = "all" # == docker run --gpus all
# ...
}
Troubleshooting
HTTP 400: System message must be at the beginning
vLLM 실행 후 "OpenAI 호환" 으로 AI 연결하면 HTTP 400 에러 나면서 다음 에러 출력됨:
Jinja chat template 이 문제이다.
많은 템플릿에 이런 방어 코드가 들어 있습니다:
{%- if messages[0]['role'] != 'system' and ns.system_seen %}
{{- raise_exception('System message must be at the beginning') }}
{%- endif %}
즉 messages 배열에 role: "system" 이 첫 번째가 아닌 위치에 들어왔다는 뜻입니다. 게이트웨이가 프롬프트를 통과시킬 때 system 메시지를 추가로 끼워넣었거나, 클라이언트가 대화 중간에 system을 다시 보낸 경우입니다.
흔한 발생 경로:
- Anthropic 포맷 클라이언트(Claude Code 등) → OpenAI 포맷 변환. Anthropic은
system이 최상위 별도 필드라 변환 시 위치가 어긋날 수 있습니다. - 에이전트 하네스가 대화 중간에 system reminder를 삽입 (Claude Code, Cline이 자주 이럽니다)
- system 메시지가 2개 이상 (첫 번째는 맞는데 두 번째가 중간에)
-
role: "developer"를 system으로 매핑하면서 위치가 밀림
See also
- VSCode
- Cloud9
- Jupyter
- Gitpod
- Eclipse Che
- DevPod (Loft Labs)
- OpenVSCode Server / code-server