Docker 手动升级 ComfyUI 到最新版
问题背景
最近安装 rgthree-comfy 等插件时,ComfyUI-Manager 提示:
[Security Alert]
ComfyUI outdated. Installations blocked (update allowed).
或者
This action is not allowed with this security level configuration.
Manager 版本:
Manager V3.41
ComfyUI 版本:
v0.2.2
虽然 Docker 镜像使用的是
image: ghcr.io/ai-dock/comfyui:latest-cuda
但是实际上镜像内部自带的 ComfyUI 仍然停留在 v0.2.2。
而新版 Manager 已经禁止旧版本安装任何插件,因此必须升级 ComfyUI。
一、确认当前版本
进入容器
docker exec -it comfyui bash
进入 ComfyUI
cd /opt/ComfyUI
查看版本
git describe --tags --always
git log -1 --oneline
例如:
v0.2.2
0c7c98a (HEAD, tag: v0.2.2)
说明当前运行的是旧版。
二、查看是否为 Git 仓库
git status
git remote -v
如果看到
origin https://github.com/comfyanonymous/ComfyUI
说明可以直接升级。
三、拉取最新 Tag
git fetch origin --tags --prune
查看最新版本
LATEST_TAG=$(git tag --sort=-version:refname | head -1)
echo $LATEST_TAG
例如:
v0.28.0
四、为什么不能直接 checkout
第一次执行
git checkout v0.28.0
出现
error: Your local changes to the following files would be overwritten by checkout
原因:
Docker 中
custom_nodes
目录已经被挂载到了宿主机
里面存在:
example_node.py.example
websocket_image_save.py
Git 认为这是本地修改。
安装 Manager 后,旧版 ComfyUI 的兼容性和安全问题被检测出来。真正导致自动更新失败的原因,是 Docker 对整个
custom_nodes目录的挂载覆盖了 ComfyUI 仓库中的受控文件,使 Git 工作区出现本地修改,最终阻止了自动更新脚本切换到新版本。
五、恢复 Git 工作区
执行:
git reset --hard
如果还有未跟踪文件
git clean -fd
然后再次
git checkout --detach v0.28.0
即可成功切换。
六、宿主机升级遇到 Permission denied
后来为了把整个 ComfyUI 放到宿主机管理
先复制:
docker cp comfyui:/opt/ComfyUI/. ~/ai/data/comfyui/app/
之后在宿主机执行
git checkout
提示:
unable to unlink
Permission denied
原因:
Docker 拷贝出来的文件属于 root。
解决:
sudo chown -R $(id -u):$(id -g) ~/ai/data/comfyui/app
然后重新
git checkout --detach v0.28.0
即可。
七、安装新版依赖
使用容器中的 Python
/opt/environments/python/comfyui/bin/python \
-m pip install -r /opt/ComfyUI/requirements.txt
注意:
不要直接使用
python
因为 ai-dock 镜像默认没有加入 PATH。
八、重启容器
docker restart comfyui
查看版本
docker exec -it comfyui bash
cd /opt/ComfyUI
git describe --tags --always
应该看到:
v0.28.0
升级完成。
九、为什么 AUTO_UPDATE 没有效
Compose 中已经配置:
AUTO_UPDATE=true
但是实际上没有更新。
原因分析:
AI-Dock 内部启动脚本:
/opt/ai-dock/bin/update-comfyui.sh
执行流程:
git fetch
git checkout
git pull
由于:
custom_nodes/example_node.py.example
存在本地修改,
导致
git checkout
失败,
随后
git pull
又因为 Detached HEAD 失败,
最终自动升级中断。
所以 AUTO_UPDATE 并不是失效,而是 Git 工作区不干净导致升级失败。
十、推荐目录结构
建议把 ComfyUI 核心代码也持久化:
volumes:
- ~/ai/data/comfyui/app:/opt/ComfyUI
- ~/ai/models/comfyui:/opt/ComfyUI/models
- ~/ai/data/comfyui/custom_nodes:/opt/ComfyUI/custom_nodes
- ~/ai/output/comfyui:/opt/ComfyUI/output
以后升级只需要:
cd ~/ai/data/comfyui/app
git fetch origin --tags
git checkout --detach $(git tag --sort=-version:refname | head -1)
docker restart comfyui
无需重新创建容器。
总结
本次升级踩到的坑主要有:
- Docker 镜像是最新,但 ComfyUI 核心版本并不是最新。
- Manager 新版本会阻止旧版 ComfyUI 安装插件。
AUTO_UPDATE=true依赖 Git 工作区干净,否则会自动失败。custom_nodes挂载目录中的示例文件会导致 Git 无法切换版本。- 从 Docker 拷贝出来的仓库默认属于
root,需要重新修改文件权限。 - 建议将 ComfyUI 核心目录也挂载到宿主机,方便长期维护和升级。
升级完成后,Manager 不再提示 ComfyUI outdated,插件(如 rgthree-comfy、Impact Pack 等)即可正常安装。