环境说明

  • 宿主机:CentOS 7
  • 用户路径: /home/lcr/,自行替换
  • 目标:在 Docker 容器中运行 CodeBuddy CLI,并支持宿主机浏览器访问

0. 为什么要用 Docker?

试错过程

在 CentOS 7 上尝试直接安装 CodeBuddy CLI 时,先后遇到了以下问题:

1. Node.js 18.x / 20.x 无法安装(glibc 版本过低)

CentOS 7 自带的 glibc 版本为 2.17,而 Node.js 18.x 及以上要求 glibc ≥ 2.28。使用 NodeSource 官方源安装时直接报依赖错误:

错误:软件包:nodejs 需要:glibc >= 2.28
       已安装: glibc-2.17-326.el7_9.3.x86_64

Node.js 16.x 虽然兼容 glibc 2.17,但 NodeSource 已停止为 CentOS 7 提供 16.x 的 RPM 包,实际拉到的仍是 18.x。

2. 原生二进制安装也失败(Bun 运行时依赖 glibc 2.18)

CodeBuddy CLI 的原生二进制版本使用 Bun 打包,而 Bun 运行时要求 glibc ≥ 2.18,同样比 CentOS 7 的 2.17 高:

error: /lib64/libc.so.6: version `GLIBC_2.18' not found

3. 升级 glibc 风险极高

glibc 是 Linux 系统最底层的 C 运行时库,几乎系统中所有程序都依赖它。在 CentOS 7 上强制升级 glibc 极大概率导致系统崩溃,不具备可行性。

结论:Docker 是最优解

Docker 容器自带独立的文件系统和运行环境,可以在 CentOS 7 宿主机上运行 Ubuntu 22.04 容器(glibc 2.35),彻底绕过 glibc 版本限制。同时:

  • 容器内的环境与宿主机完全隔离,互不影响
  • 项目文件通过目录挂载共享,在容器内修改代码,宿主机直接可见
  • 不需要时删除容器即可,零残留

1. 安装 Docker

# 安装依赖
yum install -y yum-utils

# 添加 Docker 源(使用阿里云镜像,国内网络更稳定)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务
systemctl start docker
systemctl enable docker

# 验证安装
docker --version

配置 Docker 镜像加速(国内环境)

cat > /etc/docker/daemon.json << 'EOF'
{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.xuanyuan.me"
    ]
}
EOF

systemctl daemon-reload
systemctl restart docker

2. 添加用户到 docker 组

避免每次使用 docker 命令都需要 sudo:

usermod -aG docker lcr

# 重新登录或执行以下命令使生效
newgrp docker

3. 创建 Dockerfile

在用户目录下创建 /home/lcr/Dockerfile

FROM node:20-slim

# 安装基础工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    git curl vim \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 配置 npm 国内镜像源
RUN npm config set registry https://registry.npmmirror.com

WORKDIR /workspace
CMD ["/bin/bash"]

为什么不在 Dockerfile 中安装 CodeBuddy CLI?

CodeBuddy CLI 更新频繁,如果把安装命令写死在 Dockerfile 中(RUN npm install -g @tencent-ai/codebuddy-code),会导致两个问题:

  1. 每次更新都要重新构建镜像 — CLI 发新版本时,必须修改 Dockerfile 或带 --no-cache 重新 docker build,构建过程中还要重新拉取基础镜像和所有依赖,耗时较长。
  2. 构建时网络不稳定容易失败npm installdocker build 阶段如果遇到网络波动或超时,整个构建就会中断,排查和重试成本高。

因此本方案将 CLI 安装放到第 4 步,首次手动安装后通过 docker commit 固化,后续升级只需进入容器执行 npm update -g @tencent-ai/codebuddy-codedocker commit 即可,灵活且高效。


4. 构建基础镜像并安装 CLI

4.1 构建基础镜像

cd /home/lcr
docker build -t codebuddy-base .

4.2 启动容器并手动安装 CLI

# 启动基础容器
docker run -it --name temp-codebuddy codebuddy-base bash

# 在容器内执行
npm install -g @tencent-ai/codebuddy-code

# 退出容器(Ctrl+D),然后保存为镜像
exit
docker commit temp-codebuddy codebuddy-cli
docker rm temp-codebuddy

5. 创建持久化目录

mkdir -p /home/lcr/.codebuddy-docker

6. 创建启动脚本

创建 /home/lcr/start-codebuddy.sh

#!/bin/bash
docker run -it --rm \
    -p 39162:39162 \
    -v $(pwd):/workspace \
    -v /home/lcr/.codebuddy-docker:/root/.codebuddy \
    -e CODEBUDDY_API_KEY="此处粘贴你的API_KEY" \
    -e CODEBUDDY_INTERNET_ENVIRONMENT=internal \
    codebuddy-cli

赋予执行权限:

chmod +x /home/lcr/start-codebuddy.sh

7. 启动容器并运行 CodeBuddy

# 在项目目录下执行
cd /path/to/your/project
/home/lcr/start-codebuddy.sh

# 进入容器后,启动 CodeBuddy 服务
codebuddy --serve --host 0.0.0.0 --port 39162

8. 访问 CodeBuddy Web UI

在宿主机浏览器打开:

http://192.168.0.165:39162

说明:由于 CodeBuddy 的安全策略限制,从局域网其他机器(如 Windows)直接访问会返回 403。目前仅支持宿主机本机浏览器访问。


9. 常用命令速查

操作命令
查看运行中的容器docker ps
查看所有容器docker ps -a
停止容器docker stop <容器名>
进入运行中的容器docker exec -it <容器名> bash
查看镜像docker images
删除容器docker rm <容器名>
删除镜像docker rmi <镜像名>
查看容器日志docker logs <容器名>
查看容器 IPdocker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名>

10. 文件结构总结

/home/lcr/
├── Dockerfile                  # Docker 镜像构建文件
├── start-codebuddy.sh          # 容器启动脚本
└── .codebuddy-docker/          # CodeBuddy 配置持久化目录
    └── ...                     # API Key、会话记录等

11. 注意事项

  • 每次更新 CodeBuddy CLI 版本需要重新构建镜像
  • CentOS 7 不支持直接安装 CodeBuddy CLI,Docker 是目前最可靠的方案

更多推荐