Skip to content

Docker升级坑点汇总,非 Bug 反馈 #7081

@Mrxia7757

Description

@Mrxia7757

标题:Docker 升级坑点汇总,非 Bug 反馈

例行检查

  • 我已确认目前没有类似 issue
  • 我已完整查看过项目 README,以及[项目文档](https://doc.fastgpt.io/introduction/)
  • 我使用了自己的 key,并确认 key 可正常使用
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

你的版本

  • 公有云版本
  • 私有部署版本,具体版本号:
Docker Compose 部署
升级路径:
v4.14.x → v4.14.22 → v4.15.0-beta1 → v4.15.0-beta2

相关组件版本:

FastGPT:v4.15.0-beta2
FastGPT Pro:v4.15.0-beta2
FastGPT Plugin:v0.6.2
AIProxy:v0.5.6
Agent Sandbox:v0.2.0
Agent Volume Manager:v0.2.0

问题描述、日志截图、配置文件等

本次在测试环境使用 Docker Compose 逐步升级,过程中遇到了一些配置兼容和部署注意事项。大部分不是程序 Bug,但如果仅修改镜像 tag,比较容易出现服务启动失败、502、文件上传失败或虚拟机不可用等问题。

整理如下,供其他私有部署用户参考。

1. FastGPT 主服务监听地址

升级后,Next.js 可能只监听容器内部某个 IP,导致:

curl: Recv failure: Connection reset by peer
502 Bad Gateway

需要在 FastGPT 主服务中明确配置:

environment:
  - HOSTNAME=0.0.0.0

如果 FastGPT Pro 也存在相同监听问题,可以给 Pro 同样配置。

2. beta 版本加强了环境变量校验

升级后,如果必填变量缺失或格式不符合要求,服务会持续提示:

Invalid environment variables
System initialization failed

FastGPT 与 FastGPT Pro 需要重点检查:

environment:
  - TOKEN_KEY=<自定义安全值>
  - AES256_SECRET_KEY=<自定义安全值>
  - FILE_TOKEN_KEY=<自定义安全值>

注意事项:

  • FastGPT 和 FastGPT Pro 中的相关密钥需要保持一致。
  • 不要直接复制示例中的默认值到生产环境。
  • 不要使用过短或过于简单的值。
  • 升级前检查同一服务中是否重复配置了同名环境变量。
  • Compose 列表中出现重复变量时,后面的值可能覆盖前面的值,但会增加排查难度。

3. SYNC_INDEX 参数格式变化

新版本中应使用布尔字符串:

- SYNC_INDEX=true

或:

- SYNC_INDEX=false

不建议继续使用:

- SYNC_INDEX=1
- SYNC_INDEX=0

如果 MongoDB 中已经存在重复数据,启用索引同步可能出现:

E11000 duplicate key error
index: appId_1_chatId_1

此错误在本次环境中没有阻止系统完成初始化,但会导致唯一索引创建失败。建议先清理重复数据,再开启自动索引同步。

4. AIProxy PostgreSQL 共享内存不足

升级 AIProxy 后,执行日志清理或 VACUUM ANALYZE 时出现:

could not resize shared memory segment
No space left on device

该错误不一定是宿主机磁盘不足,而可能是 PostgreSQL 容器默认 /dev/shm 只有 64MiB。

可以在 aiproxy_pg 服务中增加:

aiproxy_pg:
  shm_size: "256mb"

修改后需要重建 aiproxy_pg 容器。

5. Pro 后台文件上传接口路由

在 Pro 管理后台上传头像或文件时,请求路径可能是:

/api/system/file/upload/

如果 Pro 域名的 Nginx 将全部请求都代理到 FastGPT Pro,这个上传接口可能返回 404。

需要将该路径单独转发到 FastGPT 主服务,例如:

location ^~ /api/system/file/upload/ {
    proxy_pass http://<FASTGPT_MAIN_SERVICE>;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
}

其中 <FASTGPT_MAIN_SERVICE> 替换为实际的 FastGPT 主服务地址。

6. 容器重建后 Nginx 可能缓存旧容器地址

使用 Docker Compose 重建 FastGPT 或 FastGPT Pro 后,容器 IP 可能变化。

如果 Nginx 使用服务名代理,但没有及时重新解析,外部访问可能暂时出现:

502 Bad Gateway

此时可以重启 Nginx 容器,让其重新解析上游服务地址。

7. beta2 沙盒组件需要配套升级

升级到 beta2 时,除了 FastGPT 和 FastGPT Pro,还需要同步调整:

fastgpt-agent-sandbox:v0.2.0
fastgpt-agent-volume-manager:v0.2.0

FastGPT 环境变量中的沙盒镜像 tag 也需要同步更新:

- AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG=v0.2.0

只升级 FastGPT 主服务,而未更新配套沙盒组件,可能导致功能不兼容。

8. OpenSandbox API Key 两端必须一致

如果仅部署了 OpenSandbox 服务,但没有配置 API Key,FastGPT 可能识别不到虚拟机配置,前端提示:

当前系统未配置虚拟机,暂时无法使用相关功能

OpenSandbox 配置示例:

[server]
host = "0.0.0.0"
port = 8090
api_key = "<自定义安全值>"

FastGPT 环境变量:

- AGENT_SANDBOX_PROVIDER=opensandbox
- AGENT_SANDBOX_OPENSANDBOX_BASEURL=http://opensandbox-server:8090
- AGENT_SANDBOX_OPENSANDBOX_API_KEY=<与服务端一致的值>

注意:

  • API Key 不要使用文档示例值。
  • 不要在 issue、日志截图或配置文件中公开实际值。
  • OpenSandbox 服务端和 FastGPT 客户端的值必须一致。

9. OpenSandbox 实际监听端口不要只看镜像声明

容器镜像可能显示暴露了某个端口,但实际服务监听端口由配置文件决定。

本次环境中:

[server]
port = 8090

因此 FastGPT 应连接:

- AGENT_SANDBOX_OPENSANDBOX_BASEURL=http://opensandbox-server:8090

建议通过容器内实际访问确认,不要只根据 docker ps 中的 EXPOSE 信息判断。

10. OpenSandbox 自定义网络与 networkPolicy 冲突

虚拟机功能已经显示,但创建 Sandbox 时出现:

Failed to create sandbox

FastGPT 日志中的实际原因是:

networkPolicy is not supported when docker network_mode is a user-defined network.
Use network_mode='bridge' to enable network policy enforcement.

OpenSandbox 创建沙盒时,如果请求中包含 networkPolicy,Docker runtime 不能使用自定义网络名称。

需要在 opensandbox-config.toml 中配置:

[docker]
network_mode = "bridge"

注意:

  • 这里修改的是 OpenSandbox 创建出来的运行时沙盒容器网络模式。
  • 不代表需要删除 opensandbox-server 自身在 Docker Compose 中加入的业务网络。
  • 修改后只需重建 OpenSandbox Server,再重新创建 Sandbox。

11. Agent Volume Manager 正常不代表 Sandbox 一定能创建

本次排查中,Volume Manager 日志已经显示卷创建成功:

POST /v1/volumes/ensure
created=true
status=201

但 OpenSandbox 创建运行时容器仍然返回 400。

因此,排查 Failed to create sandbox 时需要分别查看:

FastGPT 日志
OpenSandbox Server 日志
Agent Volume Manager 日志
Docker 新建容器状态

不能仅根据 Volume Manager 成功判断整个 Sandbox 链路正常。

12. 启动瞬间的连接失败不一定是升级失败

重建 FastGPT 或 FastGPT Pro 后,前几次访问可能出现:

Connection reset by peer
Operation timed out
HTTP 000

等待初始化完成后可能恢复为 HTTP 200。

建议使用循环健康检查,而不是在容器刚启动时根据第一次请求直接回滚。

13. Redis 启动阶段可能出现短暂重连日志

FastGPT 初始化完成后,可能短时间出现:

Redis reconnecting

如果 Redis 容器状态为 healthy,FastGPT 后续运行正常,并且日志不持续增长,可以先观察,不一定代表 Redis 故障。

14. Docker Compose 的 version 字段警告

新版 Docker Compose 会提示:

the attribute `version` is obsolete

该警告不会阻止服务启动,但可以在后续维护时移除 Compose 文件顶层的 version 字段,避免干扰排查。

复现步骤

  1. 使用较旧版本的 Docker Compose 配置部署 FastGPT。

  2. 仅修改 FastGPT、FastGPT Pro、Plugin、AIProxy 等镜像 tag。

  3. 未同步更新环境变量校验要求、沙盒组件版本和 OpenSandbox 配置。

  4. 依次测试:

    • FastGPT 主站
    • FastGPT Pro 管理后台
    • 文件上传
    • AIProxy
    • Agent Skill
    • OpenSandbox 虚拟机
  5. 可能出现:

    • 主服务连接重置
    • Nginx 502
    • 环境变量校验失败
    • 文件上传 404
    • PostgreSQL 共享内存不足
    • 虚拟机功能不显示
    • Failed to create sandbox
    • OpenSandbox 创建接口返回 400

预期结果

希望升级文档可以增加一份 Docker Compose 升级检查清单,至少提示以下内容:

1. FastGPT 和 Pro 的 HOSTNAME 监听配置
2. TOKEN_KEY、AES256_SECRET_KEY、FILE_TOKEN_KEY 的必填和一致性
3. 环境变量重复项检查
4. SYNC_INDEX 新的布尔格式
5. MongoDB 重复数据对唯一索引的影响
6. AIProxy PostgreSQL 的 shm_size
7. beta2 沙盒组件需要配套升级
8. OpenSandbox API Key 两端一致
9. OpenSandbox 实际监听端口
10. networkPolicy 与 Docker network_mode 的限制
11. Pro 文件上传接口应代理到 FastGPT 主服务
12. Docker 容器重建后 Nginx 上游地址刷新

以上内容主要是升级和部署经验汇总,不一定属于产品 Bug,希望可以作为文档补充或其他私有部署用户的参考。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions