OpenClaw AI助手入门教程-OpenClaw升级(docker版)
说明
- openclaw目前更新的频率很快,基本每天都会出来一个新版本,但是使用docker版本的升级,就比较麻烦。目前总结一下几次升级的注意事项,留一个记录.
- 痛点:每次升级都会把之前软件都清除,都要重新安装。
- 解决:官方的作为基础镜像,自己基于基础镜像,创建自定义镜像。
具体方法:
- 先使用官方的方式编译出来一个镜像,默认是openclaw:local 或使用官方编译好的镜像版本,作为基础镜像
- 在以基础镜像为基础,自己再编译一个自定义的镜像版本,安装自己需要的软件,配置,插件依赖相关的后的镜像,作为自定义镜像
- 最终在docker-compose.yml里面使用自定义镜像或.env指定自定义镜像。
- 这样做的好处是,不更改官方的内容。git pull代码之后,就可以自己docker-setup.bash编译了。
升级步骤:
- 1.首先备份重要配置,比如:
cd openclaw
mv docker-compose.yml docker-compose.yml.bk
mv ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bk
- 2.更新代码
git pull origin main
- 可能会有一些冲突文件,导致代码更新失败
- 如果有冲突文件,记得先备份出来,再mv为另外文件,再更新代码
- 3.通过openclaw让他统计以下新安装的软件,获取一个软件列表,为自定义镜像使用
- 4.重新编译镜像,获取基础镜像,或使用官方的镜像作为基础镜像
./docker-setup.bash
这一步编译完成会进行配置,按照简单方式配置就可以,看第一篇的安装教程。
一定要记录新的token,使用新token来配置旧的openclaw.json里面的token,要不容易导致token不一致
因为配置token,环境token,进程token都要保持一致。新安装环境token和进程token都是一致的,就是旧配置的token是不一样,更改这个更容易让其他保持一致。但是麻烦一点就是你客户端要重新配置一下token。
目前如果.env定义了token,openclaw也会使用现有的token
5.恢复配置,目前docker-compose.yml可能还使用.env定义的基础镜像openclaw:local
这时候会有一个新的docker-compose.yml和~/.openclaw/openclaw.json。这个可以再备份
#备份新配置
mv docker-compose.yml docker-compose.yml.bk.new
mv ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bk.new
#恢复旧配置
mv docker-compose.yml.bk docker-compose.yml
mv ~/.openclaw/openclaw.json.bk ~/.openclaw/openclaw.json
- 建立自定义脚本docker-custom.sh,根据需要设置IMAGE_NAME
- 内容如下:
#!/bin/bash
set -e
IMAGE_NAME="openclaw:2026-03-09-v1"
FORCE=false
# 解析参数
while getopts "f" opt; do
case $opt in
f) FORCE=true ;;
*) echo "Usage: $0 [-f]"; exit 1 ;;
esac
done
if $FORCE; then
echo " 强制重建镜像 $IMAGE_NAME"
docker build -t "$IMAGE_NAME" -f Dockerfile.custom .
echo " 构建完成:$IMAGE_NAME"
else
if docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then
echo " 镜像 $IMAGE_NAME 已存在,跳过构建。使用 -f 参数强制重建。"
else
echo " 镜像 $IMAGE_NAME 不存在,开始构建..."
docker build -t "$IMAGE_NAME" -f Dockerfile.custom .
echo " 构建完成:$IMAGE_NAME"
fi
fi
- 建立一个自定义dockerfile:Dockerfile.custom
- 内容如下:
# 基于官方 OpenClaw 运行时镜像
FROM openclaw:local
# 切换到 root 用户以安装软件
USER root
# 将安装脚本复制到镜像中
COPY install-*.sh /tmp/
# 设置所有脚本可执行(由 root 执行,避免后续权限问题)
RUN chmod +x /tmp/install-*.sh
# 安装系统包(需要 root)
RUN /tmp/install-apt.sh
# 安装 Python 包(通常需要 root,除非使用了虚拟环境)
RUN /tmp/install-pip.sh
# 清理系统包缓存(可选)
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# 安装 QMD(需要 Bun)脚本会安装到用户家目录
RUN /tmp/install-qmd-root.sh
#RUN rm /tmp/install-*.sh
# 切回 node 用户(安全实践)
USER node
RUN /tmp/install-qmd.sh
# 基础镜像已定义 CMD,无需重复
- 建立需要安装软件,分别是基础软件install-apt.sh,python包install-pip.sh,qmd软件
- 把前面获取的软件列表,补充下面的脚本里
- install-apt.sh内容如下:
#!/bin/bash
set -e # 遇到错误立即退出
# 安装 apt 包
apt-get update
apt-get install -y --no-install-recommends \
vim \
jq \
sqlite3 \
python3-pip \
python3-venv \
python3-requests \
python3-yaml \
build-essential \
python3-dev \
python3-wheel
# 如果有其他 apt 包,继续添加
# apt 安装版本完全匹配的包
apt-get install -y --no-install-recommends \
python3-bs4 \
python3-lxml \
python3-sgmllib3k \
python3-soupsieve
# 清理缓存(单独的命令)
rm -rf /var/lib/apt/lists/*
- install-pip.sh内容如下:
#!/bin/bash
set -e
# 使用 pip3 安装所需的 Python 包
pip3 install --no-cache-dir --break-system-packages \
feedparser==6.0.12 \
typing_extensions==4.15.0
- install-qmd-root.sh内容如下:
- 用于安装bun
#!/bin/bash
set -e # 遇到错误立即退出
echo "===== 通过 npm 安装 Bun 和 QMD(国内加速版)====="
# 1. 检查 npm 是否可用
if ! command -v npm &> /dev/null; then
echo "错误:未找到 npm 命令。请先安装 Node.js 和 npm。"
exit 1
fi
# 2. 设置 npm 国内镜像源(阿里云)
echo "设置 npm 国内镜像源:https://registry.npmmirror.com/"
npm config set registry https://registry.npmmirror.com/
echo "当前 npm 源:$(npm config get registry)"
# 3. 通过 npm 全局安装 bun
echo "正在通过 npm 安装 bun..."
npm install -g bun
echo "bun 安装完成。"
# 4. 验证 bun 安装
BUN_VERSION=$(bun --version)
echo "bun 版本:$BUN_VERSION"
# 5. 配置 bun 的国内镜像源(用于后续安装包)
echo "配置 bun 国内镜像源..."
mkdir -p ~/.bun
cat > ~/.bunfig.toml << EOF
[install]
registry = "https://registry.npmmirror.com/"
EOF
echo "bun 镜像源配置成功。"
echo ""
echo "===== 安装完成 ====="
echo "所有命令已就绪,您可以立即使用 'qmd'。"
echo "如果新开终端后仍无法使用,请执行 'source ~/.bashrc' 刷新环境变量。"
- install-qmd.sh内容如下:
- 用于安装qmd
#!/bin/bash
set -e
echo "===== 安装 Bun 和 QMD(使用 npm,用户模式)====="
# 8. 使用 bun 安装 qmd
echo "正在通过 bun 安装 qmd..."
bun install -g @tobilu/qmd
# 9. 获取 bun 的全局 bin 目录(qmd 所在位置)
BUN_GLOBAL_BIN=$(bun pm bin -g 2>/dev/null || echo "$HOME/.bun/bin")
export PATH="$BUN_GLOBAL_BIN:$PATH"
echo "bun 全局 bin 目录:$BUN_GLOBAL_BIN"
# 10. 将 bun 的 bin 目录永久写入 ~/.bashrc
if ! grep -q "export PATH=.*$BUN_GLOBAL_BIN" ~/.bashrc; then
echo "export PATH=\"$BUN_GLOBAL_BIN:\$PATH\"" >> ~/.bashrc
fi
. ~/.bashrc
# 11. 验证 qmd 安装
qmd --version
echo "===== QMD 安装完成 ====="
- 编译自定义镜像
./docker-custom.sh
- 没有错误的话,就得到一个新的自定义镜像 openclaw:2026-03-09-v1
$ docker images | grep openclaw
openclaw 2026-03-09-v1 8929d0805c86 22 minutes ago 4.19GB
- 使用自定义镜像
- 修改.env里面OPENCLAW_IMAGE为自定义镜像名
OPENCLAW_IMAGE=openclaw:2026-03-09-v1
- 重新启动
#删除原容器
docker compose down
#启动新容器
docker compose down
#查看日志,有没出错地方,再一一排查
docker compose logs -f
- 经过上面的处理,应该大致会恢复之前的状态
- 在web ui chat 里面让openclaw进行自检,恢复其他相应即可。
已经完成升级,检查配置,软件,功能哪些地方有问题,飞书,deepseek ,邮件发送, qmd, 各个助手和配置等
- 至此,升级完成。如果升级不成功,还可以使用之前的自定义镜像版本,等升级成功后再切换新版本,这样更方便,也不影响使用。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


















