# 常见问题 **本文档中引用的文件** - [README.md](file://README.md) - [config.yml](file://config.yml) - [docker-compose.yml](file://docker/docker-compose.yml) - [main.rs](file://crates/rcoder/src/main.rs) - [docker_container_agent.rs](file://crates/rcoder/src/proxy_agent/docker_container_agent.rs) - [port_manager.rs](file://crates/rcoder/src/proxy_agent/port_manager.rs) - [server.rs](file://crates/pingora-proxy/src/server.rs) - [config.rs](file://crates/pingora-proxy/src/config.rs) - [CLAUDE.md](file://CLAUDE.md) - [install.md](file://install.md) ## 目录 1. [代理启动失败](#代理启动失败) 2. [端口冲突问题](#端口冲突问题) 3. [Docker权限错误](#docker权限错误) 4. [SSE流中断](#sse流中断) 5. [Claude Code代理集成限制](#claude-code代理集成限制) ## 代理启动失败 代理启动失败通常由配置错误或依赖服务未就绪导致。根据`crates/pingora-proxy/src/server.rs`中的实现,代理服务在启动时会进行配置验证。 **根本原因分析**: - 配置文件`config.yml`中`proxy_config.listen_port`设置为0或无效值 - 环境变量`RCODER_PORT`与代理端口冲突 - Docker socket未正确挂载,导致容器无法通信 **调试步骤**: 1. 检查日志中是否出现"配置验证失败"错误 2. 验证`config.yml`中`proxy_config.listen_port`是否为有效端口 3. 确认Docker socket路径是否正确挂载 **解决方案**: ```yaml # config.yml proxy_config: listen_port: 8088 # 确保端口大于0 default_backend_port: 8087 # 与主服务端口一致 ``` **Section sources** - [server.rs](file://crates/pingora-proxy/src/server.rs#L27-L54) - [config.rs](file://crates/pingora-proxy/src/config.rs#L50-L68) - [config.yml](file://config.yml#L16) ## 端口冲突问题 端口冲突主要发生在多个服务尝试绑定同一端口时。系统通过`port_manager.rs`管理端口分配。 **根本原因分析**: - 多个RCoder实例同时运行 - 端口范围(8000-9999)内所有端口已被占用 - 容器未正确清理,遗留端口映射 **调试步骤**: 1. 检查`netstat -an | grep `确认端口占用情况 2. 查看日志中"端口范围内无可用端口"错误 3. 使用`docker ps`检查是否有遗留容器 **解决方案**: ```bash # 修改端口范围 cargo run --bin rcoder -- --port 9000 --proxy-port 9001 ``` 或在代码中调整端口管理器范围: ```rust // port_manager.rs impl PortManager { pub fn new() -> Self { Self::with_range(10000, 11999) // 扩大端口范围 } } ``` **Section sources** - [port_manager.rs](file://crates/rcoder/src/proxy_agent/port_manager.rs#L32-L49) - [main.rs](file://crates/rcoder/src/main.rs#L223-L225) ## Docker权限错误 Docker权限错误通常与socket访问权限或挂载配置有关。 **根本原因分析**: - Docker socket未挂载到容器 - 用户不在docker组中 - 路径解析器初始化失败 **调试步骤**: 1. 检查`docker-compose.yml`中socket挂载配置 2. 验证用户权限:`groups $USER | grep docker` 3. 测试Docker API连通性:`curl --unix-socket /var/run/docker.sock http://localhost/info` **解决方案**: 确保`docker-compose.yml`包含正确配置: ```yaml services: rcoder: volumes: - /var/run/docker.sock:/var/run/docker.sock - ./project_workspace:/app/project_workspace ``` 并添加用户到docker组: ```bash sudo usermod -aG docker $USER ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L49-L82) - [docker-compose.yml](file://docker/docker-compose.yml#L11-L15) ## SSE流中断 SSE(Server-Sent Events)流中断会影响实时进度更新功能。 **根本原因分析**: - 客户端连接超时设置过短 - 代理配置未正确转发SSE连接 - 服务器资源不足导致连接被重置 **调试步骤**: 1. 检查客户端是否设置`Connection: keep-alive` 2. 验证Nginx等反向代理的超时配置 3. 监控服务器资源使用情况 **解决方案**: 在客户端增加重连机制: ```javascript const eventSource = new EventSource('/agent/progress/session123'); eventSource.onmessage = (event) => { console.log(event.data); }; eventSource.onerror = () => { setTimeout(() => { // 重新连接 eventSource.close(); }, 5000); }; ``` **Section sources** - [README.md](file://README.md#L254-L266) ## Claude Code代理集成限制 Claude Code代理集成存在特定限制和配置要求。 **根本原因分析**: - CLI工具未正确安装 - API密钥未配置 - 环境变量未正确传递 **调试步骤**: 1. 验证Claude CLI安装:`claude --version` 2. 检查环境变量:`echo $ANTHROPIC_API_KEY` 3. 查看日志中代理初始化错误 **解决方案**: 1. 安装CLI工具: ```bash npm install -g @anthropic-ai/claude-code ``` 2. 配置环境变量: ```bash export ANTHROPIC_API_KEY="your-api-key" export ANTHROPIC_MODEL="claude-3-sonnet-20240229" ``` 3. 在`config.yml`中确保代理配置正确: ```yaml default_agent: "Claude" ``` **规避方法**: - 使用环境变量而非配置文件存储API密钥 - 实现密钥轮换机制 - 添加代理健康检查 **Section sources** - [CLAUDE.md](file://CLAUDE.md#L109-L132) - [install.md](file://install.md#L5-L8) - [config.yml](file://config.yml#L5)