humanus.cpp/.devops/DOCKER_README.md

194 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Humanus.cpp Docker 开发环境使用指南
本文档提供了使用Docker环境来构建和运行Humanus.cpp项目的指南。
## 环境配置
Docker环境采用多阶段构建方式包含以下组件
- Ubuntu 20.04 作为基础操作系统
- C++ 编译工具链 (GCC, G++, CMake)
- OpenSSL 开发库支持
- Python3 开发环境
- Node.js 18.x 和 npm 支持
- 预安装的npm包:
- @modelcontextprotocol/server-puppeteer
- @modelcontextprotocol/server-filesystem
- @kevinwatt/shell-mcp
- @modelcontextprotocol/server-everything
### 多阶段构建的优势
我们的Dockerfile采用了多阶段构建方法具有以下优点
1. **优化镜像大小**:最终镜像只包含运行时必要的组件
2. **简化依赖管理**:所有依赖都在构建阶段解决,运行阶段不需要网络连接
3. **提高构建成功率**:通过分离构建和运行环境,减少构建失败的风险
4. **加快开发速度**:预构建的工具链减少每次容器启动的准备时间
## 使用方法
### 构建并启动开发环境
使用提供的脚本最为简便:
```bash
# 使用便捷脚本启动开发环境
./.devops/scripts/start-dev.sh
```
此脚本会:
1. 构建Docker镜像使用多阶段构建
2. 启动容器
3. 询问是否进入容器
也可以手动执行这些步骤:
```bash
# 进入项目根目录
cd /path/to/humanus.cpp
# 构建并启动容器
docker-compose -f .devops/docker-compose.yml build
docker-compose -f .devops/docker-compose.yml up -d
# 进入容器的交互式终端
docker-compose -f .devops/docker-compose.yml exec humanus bash
```
### 在容器内编译项目
使用提供的脚本:
```bash
# 使用便捷脚本构建项目
./.devops/scripts/build-project.sh
```
或者手动执行:
```bash
# 进入容器
docker-compose -f .devops/docker-compose.yml exec humanus bash
# 在容器内执行以下命令
cd /app/build
cmake ..
make -j$(nproc)
```
编译完成后,二进制文件将位于 `/app/build/bin/` 目录下。
### 运行项目
可以通过以下方式运行编译后的项目:
```bash
# 从容器外运行
docker-compose -f .devops/docker-compose.yml exec humanus /app/build/bin/humanus_cli
# 或者在容器内运行
# 先进入容器
docker-compose -f .devops/docker-compose.yml exec humanus bash
# 然后在容器内运行
/app/build/bin/humanus_cli
```
## 开发工作流
1. 在宿主机上修改代码
2. 代码会通过挂载卷自动同步到容器内
3. 在容器内重新编译项目
4. 在容器内测试运行
## 注意事项
- 项目的构建文件存储在Docker卷`humanus_build`中,不会影响宿主机的构建目录
- Node.js和npm已在镜像中预先安装无需额外设置
- 默认暴露了8818端口如果需要其他端口请修改`docker-compose.yml`文件
## 网络问题解决方案
如果您在构建过程中仍然遇到网络连接问题,可以尝试以下解决方案:
### 解决EOF错误
如果遇到类似以下的EOF错误
```
failed to solve: ubuntu:20.04: failed to resolve source metadata for docker.io/library/ubuntu:20.04: failed to authorize: failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fubuntu%3Apull&service=registry.docker.io": EOF
```
这通常是网络连接不稳定或Docker的DNS解析问题导致的。解决方法
1. **配置Docker镜像加速**
在Docker Desktop设置中添加以下配置
```json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
```
2. **使用构建参数和标志**
```bash
# 使用选项3在start-dev.sh脚本中
# 或手动执行
docker-compose -f .devops/docker-compose.yml build --build-arg BUILDKIT_INLINE_CACHE=1 --network=host
```
3. **尝试拉取基础镜像**
有时先单独拉取基础镜像可以解决问题:
```bash
docker pull ubuntu:20.04
```
### 设置代理
在终端中设置HTTP代理后再运行构建命令
```bash
# 设置HTTP代理环境变量
export HTTP_PROXY=http://your-proxy-server:port
export HTTPS_PROXY=http://your-proxy-server:port
export NO_PROXY=localhost,127.0.0.1
# 然后运行构建
docker-compose -f .devops/docker-compose.yml build
```
### 使用Docker镜像加速器
在Docker Desktop设置中添加镜像加速器
1. 打开Docker Desktop
2. 进入Settings -> Docker Engine
3. 添加以下配置:
```json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
```
4. 点击"Apply & Restart"
## 问题排查
如果遇到问题,请尝试以下步骤:
1. 检查容器日志:`docker-compose -f .devops/docker-compose.yml logs humanus`
2. 重新构建镜像:`docker-compose -f .devops/docker-compose.yml build --no-cache`
3. 重新创建容器:`docker-compose -f .devops/docker-compose.yml up -d --force-recreate`
4. 网络问题确认Docker可以正常访问互联网或设置适当的代理
5. 磁盘空间:确保有足够的磁盘空间用于构建和运行容器
6. 如果看到"Read-only file system"错误,不要尝试修改容器内的只读文件,而是通过环境变量配置