本文记录了在中国网络环境中使用 Docker 自托管 Rocket.Chat 升级至 7.x 后,遇到“只读模式”限制的问题。核心原因并非配置错误,而是由于 中国防火墙(GFW)阻断了关键的 DNS 与 API 请求。最终通过 软路由启用全局代理 成功解决,特此记录分享。


🧩 问题现象

升级 Rocket.Chat 到 7.2.0 后,后台出现以下提示:

Workspace in read-only mode. Admins can restore full functionality by connecting it to the internet or upgrading to a premium plan.


📖 背景介绍

Rocket.Chat 从 7.0 起更改许可策略:

  • 社区版也需定期联网与 Rocket.Chat Cloud 通信
  • 若无法联网或未注册 workspace,将默认进入 只读模式
  • 免费的 Starter 计划(最多 50 用户)依然支持

⚠️ 核心问题并非配置,而是 GFW 拦截

在我的部署环境中:

  • 宿主机、容器 理论上可以访问外网
  • /etc/resolv.conf 已正确配置 Google DNS (8.8.8.8)
  • 容器的 Docker DNS 显示正常

但容器中执行:

bashCopyEditwget https://releases.rocket.chat/v2/server/supportedVersions

始终报错:

vbnetCopyEditwget: bad address 'releases.rocket.chat'

这意味着请求被 DNS 劫持或解析失败。


🛠️ 排查过程(简略)

尝试的修复方法:

  • ✅ 修改 daemon.json 添加 DNS
  • ✅ docker-compose 加 dns 字段
  • ✅ 重启 Docker 并强制重建容器
  • ✅ 容器内 resolv.conf 显示正确

但一切正常的前提下,仍然无法解析 Rocket.Chat 的域名


✅ 最终解决方案:开启软路由全局代理

原本使用的是“绕过大陆IP”的透明代理模式:

  • 国内网站直连,国外网站走代理
  • 但 DNS 请求仍经常被拦截或污染(即使配置了 8.8.8.8)

切换为“全局代理模式”后,问题立即解决:

  • 容器内成功解析 releases.rocket.chat
  • 后台点击 Sync license 成功
  • “只读模式”提示消失

🔓 成功注册 Starter 计划后界面

  • Plan: ✅ Starter(免费)
  • License: ✅ 同步成功
  • Seats: ✅ 10/50 使用中
  • 系统恢复读写功能,工作区可正常运行

🧠 经验总结

项目内容
真正原因中国防火墙限制访问 Rocket.Chat 云服务
修复关键开启软路由全局代理,让容器网络走代理
无效操作仅修改 DNS、compose 配置无法突破 GFW
建议方式若在中国大陆运行,建议一律开启容器代理或使用 VPN 路由
社区版限制从 7.0 起不再支持无许可证离线运行

📦 建议补充操作

  • 备份 docker-compose.yml 与注册令牌
  • 确保注册 Rocket.Chat Cloud Workspace,享受免费的 Starter 计划(<50用户)
  • 后续升级时注意版本日志变化(推荐用 7.2.1 或更高)

✍️ 结语

这次排查意识到,在中国使用开源软件不仅要关注技术配置,更要理解 网络访问现实。即使一切配置正确,如果缺乏“代理意识”,也可能被困在看似神秘的错误中。

感谢软路由全局代理,让 Rocket.Chat 起死回生 🙏

Leave a Reply

Your email address will not be published. Required fields are marked *